【问题标题】:Show which record was updated by using trigger显示使用触发器更新了哪条记录
【发布时间】:2016-06-04 12:47:32
【问题描述】:

我是 PL/SQL 的新生,遇到这样的问题:

我想创建一个触发器,显示该人的姓氏,其电话号码已更新

我做了什么

Set SERVEROUTPUT ON

Create or replace trigger inform
after update of scontact_number on SUPLIER
for each row
DECLARE 
x SUPLIER.ssurname%TYPE;
BEGIN
Select SSURNAME
into x
from SUPLIER;
dbms_output.put_line('New tel number for ' || x);
END;
/ 

UPDATE SUPLIER
SET SCONTACT_NUMBER = 6765092654
WHERE ID_SUPLIER = 1; 

trigger 已编译,但当我尝试触发它时,我得到一个错误'table is mutating'

我该如何解决? 如果有任何答案,我将不胜感激

【问题讨论】:

    标签: database plsql triggers dml


    【解决方案1】:

    触发器中不需要表引用。只需使用:new

    Create or replace trigger inform
    after update of scontact_number on SUPLIER
    for each row
    DECLARE 
        x SUPLIER.ssurname%TYPE;
    BEGIN
        Select :new.SSURNAME
        into x
        from dual;
    
        dbms_output.put_line('New tel number for ' || x);
    END;
    / 
    

    或者,更简单地说:

    BEGIN
        dbms_output.put_line('New tel number for ' || :new.SSURNAME);
    END;
    

    并且不需要任何变量。

    【讨论】:

    • 关于您的第一个代码 sn-p - 我相信,根据最佳实践,最好将值简单地分配给变量 (x := :new.SSURNAME;) 而不是切换 PL/SQL - SQL 上下文(SELECT .. INTO)。
    猜你喜欢
    • 1970-01-01
    • 2012-01-08
    • 2021-10-16
    • 2013-06-11
    • 2014-12-20
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    相关资源
    最近更新 更多