我的触发器原型:
表t1,只有一个字段id number类型的create or replace trigger triiger_delete_users
  before delete on t1
  for each row
begin
    //此处要求不要删除数据,阻止接下来的删除
end triiger_delete_users;也说是说,删除前,经过此触发器后,不执行以下的
delete t1 where id=?了
求高手!

解决方案 »

  1.   

    RAISE_APPLICATION('200001','不允许删除数据!');
      

  2.   

    railse_application_error(200001,'不允许删除数据!');
    应该这样写。。
      

  3.   

    楼上的,不行呀,这是错误信息
    2/4      PLS-00201: identifier 'RAILSE_APPLICATION_ERROR' must be declared
      

  4.   

     railse_application_error(-200001,'不允许删除数据!');
    晕倒,少了个负号
      
      

  5.   

    raise_application_error(异常类型,传递信息)异常类型:number() 值域:-20000 到-20999
    raise_application_error(-200001,'不允许删除数据!');
    刚才的RAISE多了个L....
      

  6.   

    不是太明白楼主的意思  不过可以用insert重新插入
      

  7.   

    简单。加一句:
    :new.id=100000000000;--赋值一个 不存在的ID
      

  8.   

    想到一个方法,用instead trigger,TRIGGER里的代码来代替这个DML动作,也就是DML不会真正的执行.但这个trigger是建在view上的,所以,首先要建个view,以后的操作也是基于这个viewcreate view v_t1 as select * from t1;create or replace TRIGGER v_t1_trigger 
    instead of delete 
    ON V_T1 
    FOR EACH ROW
    BEGIN      
       dbms_output.PUT_LINE('Could not delete');--如果你什么也不想输出,这里写 null;
    END;--test
    delete from v_t1 where id = 44;
    1 rows deleted
    Could not delete--还会发现,直接从表里删也是不行的,会报错
    delete from t1 where id = 44;
    Error starting at line 1 in command:
    .....