微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

合并语句SQL语法

如何解决合并语句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 举报,一经查实,本站将立刻删除。