如何绘制触发触发器 pl/sql 的线?

Posted

技术标签:

【中文标题】如何绘制触发触发器 pl/sql 的线?【英文标题】:How to draw the line that triggered the trigger pl/sql? 【发布时间】:2017-05-30 07:55:45 【问题描述】:

这是我的代码:

CREATE  OR REPLACE  TRIGGER TR_DEL
AFTER INSERT OR UPDATE
ON DIZIONARIO_CHIAVI_DA_ESCLUDERE
FOR EACH ROW 
DECLARE
    CURSOR c_cursore_prendi_riga IS 
       SELECT CURRICULUM_CHIAVE_RICERCA 
         FROM PERSONA; 
    myCursor PERSONA.CURRICULUM_CHIAVE_RICERCA%TYPE; 
BEGIN
  OPEN c_cursore_prendi_riga;
  LOOP
    FETCH c_cursore_prendi_riga INTO myCursor;
    EXIT WHEN c_cursore_prendi_riga%NOTFOUND;
    dbms_output.put_line('oo='|| myCursor );

    -- Here I need it      

  END LOOP;
  CLOSE c_cursore_prendi_riga;
END;

我需要启动触发器的行,谢谢

【问题讨论】:

您使用:new:old 伪记录来引用触发触发器的行的列/列。例如:new.col_name. 有效!谢谢! 【参考方案1】:

尼古拉斯·克拉斯诺夫是对的,把这个放在答案中:

:new 和 :old 用作伪记录。文档在这里:

https://docs.oracle.com/database/121/TDDDG/tdddg_triggers.htm#TDDDG50000

这里是对这些伪记录的解释:

https://docs.oracle.com/database/121/LNPLS/triggers.htm#LNPLS99955

最重要的是:伪记录不能像“正常”记录那样使用。您必须为每一列命名...

例如你不能使用:

my_special_function(:new);

你必须创建一个“真实的”记录:

declare
  myrec  mytable%rowtype;
begin
  myrec.id := :new.id;
  myrec.name := :new.name;
  myrec.birthdate := :new.birthdate;
  etc etc etc
  my_special_function(myrec);
end

【讨论】:

以上是关于如何绘制触发触发器 pl/sql 的线?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PL/SQL 中的触发器回滚列

PL/SQL:如何启用模式中的所有触发器?

如何通过 PL/SQL 中的触发器发送电子邮件

pl sql触发器如何比较触发器中的列值

PL/SQL 如何比较触发器中的表达式?

PL/SQL 中的触发器