合并语句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);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...