【发布时间】:2017-01-30 15:44:41
【问题描述】:
我必须从另一个表中插入表。
这是 MST_LIST 表
NAME | VER | FLAG
-----+-----+-----
A |201 |1
B |101 |1
和 TMP_LIST 更新以前的表
T_NAME | T_VER
-------+-------
A |202
C |101
我使用合并来更新插入。这是我创建的代码。
create or replace TRIGGER MST_LIST_TRIG
AFTER INSERT OR UPDATE ON TMP_LIST
FOR EACH ROW
BEGIN
MERGE INTO MST_LIST USING DUAL ON ( NAME = :NEW.T_NAME )
WHEN MATCHED THEN UPDATE SET
VER = :NEW.T_VER
WHEN NOT MATCHED THEN INSERT (NAME, VER, FLAG_ACTIVE)
VALUES (:NEW.T_NAME, :NEW.T_VER, 1);
END MST_LIST_TRIG;
但问题是我需要添加另一个更新
update MST_LIST set FLAG = 0 where NOT EXISTS
(SELECT TMP_LIST.T_NAME FROM TMP_LIST WHERE MST_LIST.NAME = TMP_LIST.T_NAME);
得到这样的结果
NAME | VER | FLAG
-----+-----+-----
A |202 |1
B |101 |0
C |101 |1
我尝试了 Loop 和 If 但仍然无法获得预期的结果。请帮我。谢谢。
【问题讨论】:
标签: oracle plsql merge triggers upsert