问题描述
我正在尝试比较不同表中的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);