DB2 SQL 代替更新触发器
Posted
技术标签:
【中文标题】DB2 SQL 代替更新触发器【英文标题】:DB2 SQL instead of update trigger 【发布时间】:2014-08-13 13:22:20 【问题描述】:您好,我有以下代码,用于创建 DB2 SQL 触发器,扩展
connect to sample
@
drop TABLE countries
@
drop view view1
@
drop TRIGGER update_view1_2
@
CREATE TABLE countries (id int, country varchar(50), region varchar (50), average_temp int)
@
CREATE VIEW view1 (id, continent, temperature) as SELECT id, region, average_temp from countries
@
CREATE TRIGGER update_view1_2
INSTEAD OF UPDATE ON view1
REFERENCING OLD AS o NEW AS n
FOR EACH ROW
MODE DB2SQL
BEGIN ATOMIC
UPDATE countries c
SET c.region = n.continent
WHERE c.region = o.continent;
END
@
我用这个运行这个脚本:
db2 -td@ -v -f trig_ipd_wiev1.db2 -z procs.log
----问题已解决----
【问题讨论】:
错误码是什么? DB21034E 该命令被作为 SQL 语句处理,因为它不是有效的命令行处理器命令。在 SQL 处理期间,它返回: SQL0206N "N.REGION" 在使用它的上下文中无效。第 7 行。 SQLSTATE=42703 它是视图的触发器吗?还是在桌子上? 视图view1
是否实际上包含列region
?通过将表和视图定义添加到问题中,向我们展示它们。
@AngocA 是的,这是一个“代替”触发器,在视图上定义了什么
【参考方案1】:
问题是,有
SET c.region = n.region
WHERE c.region = o.region;
代替
SET c.region = n.continent
WHERE c.region = o.continent;
【讨论】:
以上是关于DB2 SQL 代替更新触发器的主要内容,如果未能解决你的问题,请参考以下文章