oracle中,用pl/sql创建触发器报触发器无效且未通过重新验证

create or replace trigger trig_del_department
after delete on dept
for each row
begin
if deleting then
delete from emp where deptno=:old.deptno;
end if;
end;
/
总是报触发器无效且未通过重新验证,但是在dos下面的sqlplus中却提示创建成功,能运行,这是为什么,注:pl/sql应该是已经连接上数据库的,因为在里面运行select * from emp是可以的

一般情况就是触发器的语法不正确。

触发器的一般语法如下:

CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER }
{INSERT | DELETE | UPDATE [OF column [, column â€¦]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column â€¦]]}...]
ON [schema.]table_name | [schema.]view_name 
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
PL/SQL_BLOCK | CALL procedure_name;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-17

首先检查下你登录的user和数据库是否一样。如果是一样的话,再检验该用户对dept的操作权限。最后你试着注释一些代码在运行看看,例如下面的代码:

create or replace trigger trig_del_department
after delete on dept
for each row
  begin
    if deleting then
      --delete from emp where deptno=:old.deptno;
      null;
    end if;
  end;

慢慢的排查错误。

本回答被提问者采纳
相似回答