(SQL/PLSQL) 在触发期间显示更新的行

Posted

技术标签:

【中文标题】(SQL/PLSQL) 在触发期间显示更新的行【英文标题】:(SQL/PLSQL) Display updated rows during trigger 【发布时间】:2018-08-31 01:20:04 【问题描述】:
create or replace trigger add_trips 
  AFTER UPDATE OR INSERT OR DELETE ON TRIP
DECLARE
  trip_num DRIVER.TRIPS%TYPE; 
BEGIN  
  UPDATE DRIVER SET trips = (SELECT COUNT(L#) AS NUMOFTRIPS FROM TRIP WHERE 
  DRIVER.L# = TRIP.L#) 
WHERE EXISTS (SELECT TRIP.L# FROM TRIP WHERE TRIP.L# = DRIVER.L#);
END;

有没有办法在触发器运行后显示更新的行?

【问题讨论】:

您可以,但您不应该这样做,因为触发器可以从执行更新的任何地方执行,并且虽然您的应用程序可能希望返回结果集,但其他调用者可能不会。 有没有其他方法可以不用触发器? 如果您的应用需要显示列表,请在更新后进行选择。据推测,您知道或可以推导出已更新的数据集。您还可以将更新作为存储过程来更新行程和驱动程序,然后可以查询您喜欢的任何内容。触发器的问题是它们往往相对隐藏,除非你去寻找它们。 【参考方案1】:

如果您只是在查找更新/插入的行数,您可以使用以下命令通过 dbms 输出显示这些行数:

 dbms_output.put_line(sql%rowcount || ' rows updated/inserted.');

【讨论】:

以上是关于(SQL/PLSQL) 在触发期间显示更新的行的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 在更新触发器中删除更新的行

更新子表后数据库触发器更新父表上的行

在 Oracle 插入触发器期间更新以前的记录版本

更新后触发并更新到 SQL Server 中的行

如何在 SQL Server 触发器中复制插入、更新、删除的行

MySQL 触发器更新最后插入的行