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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Task異常捕獲的方式
- 【Spring Cloud】Feign呼叫異常觸發降級後如何捕獲異常SpringCloud
- Wireshark的捕獲過濾器過濾器
- JavaScript事件捕獲冒泡與捕獲JavaScript事件
- zendesk/maxwell:MySQL的CDC資料更新捕獲者MySql
- Flutter 會不會被蘋果限制其發展?Flutter蘋果
- 認識RPA元素分析器:介面元素是怎麼被RPA捕獲的?
- 觸發器實現表資料自動更新觸發器
- await 錯誤捕獲實現方式原始碼示例解析AI原始碼
- jQuery捕獲jQuery
- 資料抽取中的CDC(變化資料捕獲)方式
- SAP 資料更新的觸發
- JavaScript 事件捕獲JavaScript事件
- 錯誤捕獲
- connection事件當有資料傳送過來時會被觸發事件
- 不會git的程式設計師,會不會被鄙視?Git程式設計師
- mysql觸發器MySql觸發器
- D觸發器觸發器
- 你真的會在async/await中捕獲異常嗎?AI
- Spring Security(四):更新前端路由獲取方式Spring前端路由
- postgresql 按小時分表(含觸發器)的實現方式SQL觸發器
- jQuery Validate驗證觸發的方式jQuery
- 捕獲 React 異常React
- 捕獲cookie的值Cookie
- 異常及捕獲
- python異常捕獲Python
- WPF 前臺觸發器實時獲取當前時間觸發器
- 【目標區域捕獲-2】目標區域捕獲簡介
- withoutEvents函式裡面的事件被觸發函式事件
- SqlServer-觸發器SQLServer觸發器
- logon觸發器for dbaGo觸發器
- MySQL使用觸發器MySql觸發器
- 語句觸發器觸發器
- MySql-觸發器MySql觸發器
- sqlserver 列觸發器SQLServer觸發器
- 除錯觸發器除錯觸發器
- 建立MySQL觸發器MySql觸發器
- Android開發掌握什麼技術才不會被淘汰Android
- 前端開發中的Error以及異常捕獲前端Error