创建语句完整如下,使用的是scott用户登录,所测试的表也是scott其中的一个基础表dept。但是编译报错  Warning: Trigger created with compilation errors。各位有知道原因的么?
 CREATE OR REPLACE TRIGGER tr_insertdept
BEFORE INSERT ON dept
FOR EACH ROW
begin
  if (SELECT deptno FROM inserted) > 70
     --print '报错';
     RAISE_APPLICATION_ERROR(-20001,'不能插入大于70的DEPTNO!');
     ROLLBACK TRANSACTION;
  end if;
end;
/scott已经被赋予DBA权限。后来我又将begin end之间的语句全部注释掉,仍然报同样的错。无解

解决方案 »

  1.   

    楼主的语法有问题啊
     CREATE OR REPLACE TRIGGER tr_insertdept
    BEFORE INSERT ON dept
    FOR EACH ROW
    begin
     null;
    end;
    /
    这样子可以吗?都注释掉就没有方法体了,肯定会编译不过的吧,
    而且楼主的if用的不对吧?if ... then
                            end if;
      

  2.   

    (SELECT deptno FROM inserted)printrollback transaction你先把语法学习一下,别拿着SQLServer的语句直接往里面写。
      

  3.   

    请参考修改过的CREATE OR REPLACE TRIGGER tr_insertdept
    BEFORE INSERT ON dept FOR EACH ROW        
    BEGIN
      IF :new.Deptno > 70 THEN
        --print '报错';
        RAISE_APPLICATION_ERROR(-20001,'不能插入大于70的DEPTNO!');
        -- 不需要自己回滚了,因为触发器中一但抛出异常,整个工作会自动回滚
        -- ROLLBACK TRANSACTION;
      end if;
    end;