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 代替更新触发器的主要内容,如果未能解决你的问题,请参考以下文章

如何将 DB2 触发器转换为 SQL Server?

DB2:忽略更新触发器中的列

DB2 更新触发器

DB2 触发器哪个更新

在 DB2 中使用 MERGE 命令时出错

加入多表Sql触发器