在触发器里是不能直接commit 或者rollback的.
否则你的程序将无法控制transaction
 alter table ttt add constraint check_test check
 (
   col=10);
但也是会报错的.
除非你在输入值的时候就控制只能为10

解决方案 »

  1.   

    那我要怎么办呢??? 能不能在trigger中检查条件后,如果不成立,就不执行触发它的sql statement??
      

  2.   

    ........有没有不让oracle抛异常的方法??
      

  3.   

    你在程序里面控制,
    如果捕捉到的错误是:限制错误,
    就继续执行
    如asp里面
    用on error resume next 
    if err.number =  oracle错误代码 then
       err.clear
    end if
      

  4.   

    多谢 GerryYang(轻尘) 和 etheltim(etheltim) 的关注。这其实是一道习题,让我写一个触发器。我希望能写出不抛出异常但是能实现条件检验的触发器,要怎么写呢???
      

  5.   

    不可以在数据库里加上constraints吗?
      

  6.   

    不可以啊,不过加上了constraints 插入时违反了不会抛出异常吗??
      

  7.   

    CREATE OR REPLACE TRIGGER "SUADMIN"."TT" after
    INSERT ON "TTT" 
    begin
    delete "TTT" where rowid=(select max(rowid) from "TTT") and col=10;
    end tt;