我想在触发器里面做一个检查,如果要删除id='1'的数据就立刻禁止这次删除操作,该如何做。通过raise exception是否可以?

解决方案 »

  1.   

    可以,不过你在执行insert 的时候
    加上exception的相应处理(rollback)
      

  2.   

    我就想通过触发器来实现。
    触发器里面可以执行commit和rollback吗?我记不清楚了,好像有个什么东东里面不能执行commit的,是什么呀?
      

  3.   

    触发器里面可以执行commit/rollback
      

  4.   

    触发器里面可以执行commit/rollback
    以及DDL操作
      

  5.   

    触发器里面不可以执行commit/rollback
    以及DDL操作
      

  6.   

    触发器里面可以执行commit/rollback!for example:CREATE OR REPLACE TRIGGER TR_RME_SLOT AFTER    INSERT ON RME_SLOT    FOR EACH ROWDECLARE   PRAGMA AUTONOMOUS_TRANSACTION;BEGIN  IF (:NEW.POSITION >= 0 AND :NEW.POSITION <10) THEN      UPDATE RME_SLOT  SET SLOT_NAME = '0'||TO_CHAR(:NEW.POSITION) WHERE SLOT_ID=:NEW.SLOT_ID;  ELSE      UPDATE RME_SLOT  SET SLOT_NAME = TO_CHAR(:NEW.POSITION) WHERE SLOT_ID=:NEW.SLOT_ID;  END IF;  COMMIT;END;
      

  7.   

    oracle版本:8.1.609:02:19 SQL> create or replace trigger trg_tb
    09:02:23   2  before insert on tb
    09:02:34   3  for each row
    09:02:37   4  begin
    09:02:42   5  null;
    09:02:44   6  commit;
    09:02:46   7  end trg_tb;
    09:02:50   8  /触发器已创建已用时间:  00: 00: 00.50
    09:02:50 SQL> insert into tb(col1) values('a');
    insert into tb(col1) values('a')
                *
    ERROR 位于第 1 行:
    ORA-04092: COMMIT 不能在触发器中
    ORA-06512: 在"TEMP.TRG_TB", line 3
    ORA-04088: 触发器 'TEMP.TRG_TB' 执行过程中出错
    已用时间:  00: 00: 00.79
    09:03:08 SQL>
      

  8.   

    oracle都升到10g了,还抱着8i的东西不放?“PRAGMA AUTONOMOUS_TRANSACTION”在9i及以上版本是可以用的