如何解决合并语句SQL语法
我正在尝试比较不同表中的2个ID,如果它们不匹配,则应添加源中不在的行。
但是我收到此错误:
pls-00103:预期下列情况之一时遇到符号“ Person”::=(@%;
代码:
CREATE OR REPLACE PROCEDURE merge_test AS
BEGIN
MERGE person AS p
USING person_test AS t
ON t.person_id = p.person_id
WHEN NOT MATCHED BY TARGET THEN
INSERT(person_id,vorname,nachname,mobil,telefon,fax,e_mail,fgh_id)
VALUES(t.person_id,t.vorname,t.nachname,t.mobil,t.telefon,t.fax,t.e_mail,t.fgh_id);
END;
/
也许我的语法错误或我必须添加“立即执行”? 我对sql和PL / sql很陌生。
解决方法
您的MERGE
语句中存在一些问题:
- 将
t.person_id = p.person_id
放在括号中 - Oracle不允许使用带有
AS
关键字的别名表。摆脱 他们 - 这种用法(
Using person_test as t
)是不可能的,但是使用 子查询(Using (select ... from person_test) t
) - 从
by target
删除条款When not matched by target then
-
MERGE
语句后必须带有INTO
子句 -
t.person_id = p.person_id
之后的匹配条件ON
子句应加上括号
因此使用:
MERGE INTO person p
USING (SELECT person_id,vorname,nachname,mobil,telefon,fax,e_mail,fgh_id
from person_test) t
ON (t.person_id = p.person_id)
WHEN NOT MATCHED
THEN INSERT(person_id,fgh_id)
VALUES(t.person_id,t.vorname,t.nachname,t.mobil,t.telefon,t.fax,t.e_mail,t.fgh_id);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。