触发器中的 Oracle PL/SQL 游标

Posted

技术标签:

【中文标题】触发器中的 Oracle PL/SQL 游标【英文标题】:Oracle PL/SQL Cursor in Trigger 【发布时间】:2014-11-16 15:43:12 【问题描述】:

我得到了这个触发器,似乎没问题,但我得到了错误:

触发器:

CREATE OR REPLACE TRIGGER TRG_TABLE_BI
BEFORE INSERT
ON TABLE
FOR EACH ROW
DECLARE
    CURSOR cur_list IS
        SELECT emp, name, day, salary, id,phone
        FROM TABLE NATURAL JOIN OTHERTABLE
        WHERE emp = :NEW.emp AND name = :NEW.name AND id = :NEW.id;

    curChoice cur_list%ROWTYPE;

BEGIN
    OPEN cur_list;
    LOOP
        FETCH cur_list INTO curChoice;
        EXIT WHEN cur_list%NOTFOUND;
        dbms_output.put_line(curchoice.id);
        dbms_output.put_line(curChoice.emp);
        dbms_output.put_line(curchoice.name);
    END LOOP;
    CLOSE cur_list;

END;
/

我得到了那些错误:

PLS-00049: bad bind variable 'NEW.emp'

如果我在 WHERE 子句中删除游标声明中的 ':',则会出现更多错误

谢谢。

【问题讨论】:

我想你正在使用一些认为 :new.emp 是它的变量的编辑器。然后关闭变量绑定 只是退后一步来阐明这种情况下的调试价格。始终尝试 COMPILE 您在 SQL*Plus 中的代码,然后使用 SHOW ERROR 查看错误堆栈。这将非常有用。在调试PL/SQL 代码中的错误时,您将节省大量时间。 【参考方案1】:

好的,我发现了错误,在我的 WEHRE 子句中的游标声明中,我不得不删除

emp = :NEW.emp AND name = :NEW.name

因为我当前插入的表中没有这样的列。

谢谢!

【讨论】:

以上是关于触发器中的 Oracle PL/SQL 游标的主要内容,如果未能解决你的问题,请参考以下文章

Oracle笔记4-pl/sql-分支/循环/游标/异常/存储/调用/触发器

Oracle --- 存储过程函数包游标触发器

Oracle --- 存储过程函数包游标触发器

Oracle --- 存储过程函数包游标触发器

oracle(sql)基础篇系列——PLSQL游标存储过程触发器

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