在oracle中使用Trigger
生活随笔
收集整理的這篇文章主要介紹了
在oracle中使用Trigger
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、初始目標
在對表h1插入一條數據時,同時插入一條重復的數據(只有主鍵不同)
2、在PL/SQL里New一個Trigger或者手動敲入代碼
先說明一下,表h1包括4列ID、C1、C2、C3
create or replace trigger Trigger_Testafter insert on h1for each row declare--variables begininsert into h1 values(:new.C1, :new.C2, :new.C3, :new.ID); end Trigger_Test;3、F8編譯通過,新建一個窗口執行insert窗口,測試trigger是否有效,用了一個名為sequence_test的序列:
insert into h1 values('aa','bb','cc',sequence_test.nextval);報錯:表h1發生了變化,觸發器/函數不能讀。
4、網上搜的說法是“觸發器不能修改觸發表的數據,除非使用自治事務”,OK那就用自治事務:
declare--variables //改為: declarepragma autonomous_transaction;再試報錯:等待資源時檢測到死鎖。仔細一查,哦原來是目標有問題,Insert連著Insert,無限循環,不是資源死鎖就是內存不足或者棧溢出。
5、目標更新為:在對表h1插入一條數據時,同時插入一條相同的數據到歷史表里,把trigger里的insert修改為:
insert into h1_history values(:new.C1, :new.C2, :new.C3, :new.ID);再跑又報錯:檢測到活動的自治事務處理,已經回退。
6、網上接著搜,說是有事務沒提交。其實這是之前目標設定有問題,觸發器一般不會修改觸發表,用了自治事務,就要commit;如果是插入歷史表,可以都不加。
declarepragma autonomous_transaction;commit;delete from h1 where ID = 1;commit;//如果不操作觸發表,則可以去掉自治事務的這一串聲明 declareinsert into h1_history values(:new.C1, :new.C2, :new.C3, :new.ID);7、小結
轉載于:https://www.cnblogs.com/AlexanderYao/p/4514377.html
總結
以上是生活随笔為你收集整理的在oracle中使用Trigger的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么给广发银行信用卡挂失补办?挂失补办要
- 下一篇: [转]wireshark 实用过滤表达式