【发布时间】:2020-09-23 13:38:19
【问题描述】:
我正在尝试在过程中使用 2 个合并语句。 一个应该删除不在另一个表中的行。
另一个应该插入不在表格中的那些。
在这种情况下,我收到了缺少关键字的错误。
create or replace noneditionable procedure merge_test
as
BEGIN
Execute immediate 'alter table
table person
DISABLE constraint
FK_FGH_ID ';
Merge into (select distinct * from
person_test) t1
Using (select * from person) p1
On (p1.person_id = t1.person_id)
When not matched then
DELETE
FROM
person
WHERE
Person_id = p1.person_id;
COMMIT;
Merge into person p
USING (select distinct * from
person_test) t
On (t.person_id = p.person_id)
When not matched 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);
COMMIT;
Execute immediate 'alter table
person
ENABLE constraint
FK_FGH_ID ';
End merge_test;
在第一次合并中,关键字丢失错误出现在“WHEN NOT MATCHED”处。 另一个问题是是否有可能在一个过程中包含 2 个合并语句。
【问题讨论】:
-
你绝对应该避免这种可怕的“
select *”事情。用明确的列名替换它。 -
MERGE 语句中的 DELETE 仅适用于 merged 表,即我们只能从 WHEN MATCHED 分支调用它。整个第一个 MERGE 语句是完全错误的。