我想知道是否可以在插入后在视图上创建一个触发器来更新另一个表中的列?下面是我写的一个例子。
视图名称: VMC_FWD2
表名:TLORDER
CREATE OR REPLACE TRIGGER QA_TRACE_NUM_INSERT_OI
AFTER INSERT ON VMC_FWD2
REFERENCING NEW ROW AS N
FOR EACH ROW
MODE DB2SQL
BEGIN ATOMIC
update tlorder set user4 = n.status where bill_number = n.number;
END
但是,这会产生错误:
[IBM][CLI 驱动程序][DB2/NT64] SQL0156N 用于此操作的名称不是表。行号=2。SQLSTATE=42809"
更多的研究表明,您不能在视图上使用标准触发器,并且有一种解决方法,只是不是它是什么。
视图仅支持INSTEAD OF
触发器,因此您的视图看起来像
CREATE OR REPLACE TRIGGER QA_TRACE_NUM_INSERT_OI
INSTEAD OF INSERT ON VMC_FWD2
... -- skipped other declaration lines
BEGIN ATOMIC
update tlorder set user4 = n.status where bill_number = n.number;
END