Sql 如何在更新单独表中的列的视图上创建触发器?

Sql 如何在更新单独表中的列的视图上创建触发器?,sql,triggers,db2,Sql,Triggers,Db2,我想知道在insert更新另一个表中的列之后,是否可以在视图上创建触发器?下面是我写的一个例子 视图名称: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 wh

我想知道在insert更新另一个表中的列之后,是否可以在视图上创建触发器?下面是我写的一个例子

视图名称:
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 Driver][DB2/NT64]SQL0156N此操作使用的名称不是表。行号=2。SQLSTATE=42809“


还有一点研究表明,你不能在视图上使用标准触发器,还有一个解决方法,只是它不是什么。

视图只支持
而不是
触发器,所以你的

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

犹豫不决地扣动扳机,或者您遇到了错误,或者它只是不起作用?基于我不明白为什么它不起作用,前提是对视图进行更新的用户还具有
tlorder
的更新权限。那么,您编写的示例有什么问题吗?它说“-[IBM][CLI Driver][DB2/NT64]SQL0156N用于此操作的名称不是表。行号=2。SQLSTATE=42809“还有一点研究表明,你不能在视图上使用标准触发器,而且有一个解决办法,就是不能使用标准触发器。视图只支持
而不是
触发器:
创建触发器blah而不是在foo上插入…
我是否离开了。。。在第三行?不,抱歉搞混了。我在跳过的有效行中插入了省略号,以更清楚地显示我所做的更改。基本上,您只需将触发器文本中的
替换为
,而不是
,否则看起来就可以了。我刚刚在我们的测试服务器上运行了这个,它插入得非常完美。现在我要测试它,但一切似乎都很完美。非常感谢!