触发器中的 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-分支/循环/游标/异常/存储/调用/触发器