PLSQL方式更新LOB不會被觸發器捕獲
透過觸發器是沒有辦法捕獲PL/SQL透過DBMS_LOB包對LOB的修改,不過透過物化檢視日誌可以捕獲這個操作。
看一個簡單的例子:
SQL> CREATE TABLE T (ID NUMBER, CONTENTS CLOB);
表已建立。
SQL> ALTER TABLE T ADD PRIMARY KEY (ID);
表已更改。
SQL> INSERT INTO T VALUES (1, 'ABCD');
已建立 1 行。
SQL> INSERT INTO T VALUES (2, 'EFG');
已建立 1 行。
SQL> COMMIT;
提交完成。
SQL> CREATE MATERIALIZED VIEW LOG ON T;
實體化檢視日誌已建立。
SQL> CREATE TABLE T_LOG (ID NUMBER);
表已建立。
SQL> CREATE TRIGGER T
2 BEFORE UPDATE ON T
3 FOR EACH ROW
4 BEGIN
5 INSERT INTO T_LOG VALUES (:NEW.ID);
6 END;
7 /
觸發器已建立
SQL> UPDATE T
2 SET CONTENTS = 'ABCDEFG'
3 WHERE ID = 1;
已更新 1 行。
SQL> SELECT * FROM T_LOG;
ID
----------
1
SQL> SELECT ID FROM MLOG$_T;
ID
----------
1
SQL> DECLARE
2 V_RESULT CLOB;
3 BEGIN
4 SELECT CONTENTS
5 INTO V_RESULT
6 FROM T
7 WHERE ID = 2
8 FOR UPDATE;
9 DBMS_LOB.WRITEAPPEND(V_RESULT, 5, '12345');
10 COMMIT;
11 END;
12 /
PL/SQL 過程已成功完成。
SQL> SELECT * FROM T_LOG;
ID
----------
1
SQL> SELECT ID FROM MLOG$_T;
ID
----------
1
2
可以看到,對於SQL方式更新LOB操作,可以被觸發器捕獲,但是透過PL/SQL呼叫DBMS_LOB包對LOB進行的寫操作,不會被觸發器捕獲。
而物化檢視日誌會則記錄所有的操作。本以為10g中,物化檢視日誌不會再記錄PL/SQL方式的LOB修改,才使得10g的物化檢視重新整理的時候不在考慮LOB的因素,沒想到物化檢視日誌仍然是記錄LOB修改的,想不通Oracle為什麼以及實現的功能反而去掉了。
包含LOB的物化檢視快速重新整理:http://yangtingkun.itpub.net/post/468/493060
包含LOB的物化檢視快速重新整理(二):http://yangtingkun.itpub.net/post/468/493206
包含LOB的物化檢視快速重新整理(三):http://yangtingkun.itpub.net/post/468/493660
包含LOB的物化檢視快速重新整理(四):http://yangtingkun.itpub.net/post/468/493970
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-666540/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 觸發器中操作LOB觸發器
- PLSQL宣告部分異常捕獲SQL
- JavaFX教程-更新觸發器Java觸發器
- 包含觸發器的LOB表執行IMP導致EMPTY_LOB變為空觸發器
- 修改表名索引約束觸發器等物件不會失效索引觸發器物件
- Flutter 會不會被蘋果限制其發展?Flutter蘋果
- oracle觸發器~ 更新多表的問題Oracle觸發器
- 觸發器中獲取SQL語句觸發器SQL
- Wireshark的捕獲過濾器過濾器
- JavaScript事件捕獲冒泡與捕獲JavaScript事件
- 【Spring Cloud】Feign呼叫異常觸發降級後如何捕獲異常SpringCloud
- zendesk/maxwell:MySQL的CDC資料更新捕獲者MySql
- 觸發器實現表資料自動更新觸發器
- jQuery捕獲jQuery
- 蘋果手機輸入中文不會觸發onkeyup事件蘋果事件
- Oracle觸發器觸發級別Oracle觸發器
- WPF捕獲事件即使這個事件被標記為Handled事件
- 不會git的程式設計師,會不會被鄙視?Git程式設計師
- 認識RPA元素分析器:介面元素是怎麼被RPA捕獲的?
- 資料抽取中的CDC(變化資料捕獲)方式
- await 錯誤捕獲實現方式原始碼示例解析AI原始碼
- LOB欄位資料清理 - 更新為null後move lobNull
- SAP 資料更新的觸發
- Oracle觸發器6(建立系統事件觸發器)Oracle觸發器事件
- 根據業務寫觸發器(oracle觸發器片)觸發器Oracle
- JavaScript 事件捕獲JavaScript事件
- 錯誤捕獲
- mysql——觸發器MySql觸發器
- mysql 觸發器MySql觸發器
- SQL觸發器SQL觸發器
- Mysql觸發器:MySql觸發器
- Oracle觸發器Oracle觸發器
- mysql觸發器MySql觸發器
- php 正規表示式捕獲組與非捕獲組PHP
- connection事件當有資料傳送過來時會被觸發事件
- 【SQL Server】-- 一觸即發之觸發器SQLServer觸發器
- 利用觸發器解決更新主鍵衝突的問題觸發器
- postgresql 按小時分表(含觸發器)的實現方式SQL觸發器