如何获得应用了触发器更新的 SQL 数据更改语句的结果?

Posted

技术标签:

【中文标题】如何获得应用了触发器更新的 SQL 数据更改语句的结果?【英文标题】:How do I get results of SQL data change statement with triggers updates applied? 【发布时间】:2021-07-28 14:46:57 【问题描述】:

我有一个要求,我需要立即获得更新语句的结果。我看到我可以通过使用 SQL data-change-statement modifiers 来做到这一点。但是,在应用所有相关触发器后,我无法获得最终结果。例如,假设我有以下查询:

SELECT empno, salary FROM FINAL TABLE
    (UPDATE employee SET salary = salary * 1.10 WHERE job = 'CLERK')

假设我有一个执行以下操作的触发器:

CREATE TRIGGER EXTRA_PAY_RISE AFTER UPDATE ON employee 
REFERENCING OLD AS oldrow  
NEW AS newrow 
FOR EACH ROW MODE DB2SQL 
WHEN (newrow.dept = 'sales')
UPDATE employee SET salary = salary * 1.01 WHERE name = newrow.name;

如何从包含所有关联触发器应用的更新的第一个 select 语句中获取结果(如果可能的话)?

【问题讨论】:

【参考方案1】:

使用BEFORE UPDATE 触发器和NEW TABLE(在任何情况下)或FINAL TABLE(如果您没有AFTER UPDATE 触发器)。

如果您不能使用BEFORE 触发器来实现您的更新逻辑,那么您就不能使用数据更改语句来实现您的目标。

【讨论】:

是的,我认为这个解决方案对将来会面临类似问题的其他人很有用。但就我而言,我需要使用AFTER UPDATE。我可能会通过调整源代码来解决它。

以上是关于如何获得应用了触发器更新的 SQL 数据更改语句的结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何在触发器中获取sql语句

SQL 数据更改时触发脚本

SQL触发器到应用程序[关闭]

语句触发器 PL/SQL

如果主键更改,SQL 更新触发器会引发错误

如何更改 SQL 插入语句的目标表?