觸發器無需commit
也不能寫commit
觸發器和觸發它的DML是同一個事務
DML提交了,觸發器的操做也提交了,要不就一塊兒回滾了
固然,若是你必定要在觸發器裏寫COMMIT
那就用自治事務
至關於一個事務裏的子事務數據庫
正常狀況下,Oracle規定在觸發器中不能運行 ddl語句和commit,rollback語句。對象
解決辦法有兩種:事務
1.在能夠在觸發器中加入:pragma autonomous_transaction; 表示自由事務處理。
如:ip
create or replace trigger UPDATE_relaction_SAMPLE
before update ON SAMPLE
REFERENCING
FOR EACH ROW
DECLARE
pragma autonomous_transaction;
verror int;
BEGIN
verror:=0;
update sample_relation t set t.status=:new.status where t.sample_id=:new.trim_idnumeric;
if :new.status='C' and :old.status<>'C' then
proc_synch_procedure_data(:new.trim_idnumeric,verror);
it
end if;
commit;
END UPDATE_relaction_SAMPLE;io
2.能夠另外寫一個方法,把dll語句傳遞到這個方法中去執行。date
註釋:
ddl語句:DDL語句用語定義和管理數據庫中的對象,如Create,Alter,Drop,truncate等;DDL操做是隱性提交的!操做當即生效,原數據不放到rollback segment中,不能回滾. 操做不觸發trigger
DML(Data Manipulation Language)數據操縱語言命令使用戶可以查詢數據庫以及操做已有數據庫中的數據。如insert,delete,update,select等都是DMLselect