触发器里面可以执行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;
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>
加上exception的相应处理(rollback)
触发器里面可以执行commit和rollback吗?我记不清楚了,好像有个什么东东里面不能执行commit的,是什么呀?
以及DDL操作
以及DDL操作
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>