我对触发器相当陌生,所以显然我在某处做错了什么。我正在制作一个报表,它将从原始表中获取数据。为了简单起见,假设有一个表,然后有一个报表。PLSQL触发器更新另一个表中的字段值
原始表(orig_tab)
CREATE TABLE orig_tab (
PK NUMBER(8) not null,
NAME VARCHAR2(20) ,
);
INSERT INTO orig_tab (PK, NAME) VALUES (1, 'AAA');
INSERT INTO orig_tab (PK, NAME) VALUES (2, 'BBB');
INSERT INTO orig_tab (PK, NAME) VALUES (3, 'CCC');
;那么,报告表(rep_tab)
CREATE TABLE rep_tab (
PK NUMBER(8) not null,
NAME VARCHAR2(20) ,
);
从用户inteface
现在,有人更改记录2的值,显然,这应该如何治疗作为插入(因为此记录不存在)用于报告表。然后在某个时间之后,值被更改,因此它是报告表的更新情况。
问:我该如何制作这种触发器?我认为这是一个合并状态的情况。
这是我做了什么:
create or replace trigger vr_reporting_trigger
after update on orig_tab
for each row
begin
MERGE INTO rep_tab d
USING (SELECT pk FROM orig_tab) s
ON (d.pk = s.pk)
WHEN MATCHED THEN
UPDATE SET d.pk = s.pk,
d.name = s.name
WHEN NOT MATCHED THEN
INSERT (d.pk, d.name) VALUES (s.pk, s.name);
end vr_reporting_trigger;
的任何意见或建议,可以帮助我的数字出来?谢谢。
好的答案规定,凡发现最大的问题(变异表异常(“每一行”触发不允许从表中选择),可能要AFTER INSERT OR UPDATE触发器,还有一些需要考虑处理的角落案例,比如更新到orig_tab.pk(可能不希望在报表中留下“旧”行);或者如果在插入匹配行时报告表中已存在行到orig_tab。 – spencer7593