oracle怎么捕获表上的DML语句(不包括select)语句)
可以采用dml觸發(fā)器,如
CREATE OR REPLACE TRIGGER tr_capt_sql
BEFORE DELETE OR INSERT OR UPDATE
ON manager.test
DECLARE
sql_text ora_name_list_t;
state_sql capt$sql.sql_text%TYPE;
BEGIN
FOR i IN 1..ora_sql_txt(sql_text) LOOP
state_sql := state_sql || sql_text(i);
END LOOP;
INSERT INTO capt$sql(login_user,capt_time,ip_address,audsid,owner,table_name,sql_text)
VALUES(ora_login_user,sysdate,sys_context('USERENV','IP_ADDRESS'),
userenv('SESSIONID'),'MANAGER','TEST',state_sql);
EXCEPTION
WHEN OTHERS THEN
sp_write_log('Capture DML Exception:'||SQLERRM);
END tr_capt_sql;
在創(chuàng)建以上觸發(fā)器時(shí)要注意幾點(diǎn)
1、必須創(chuàng)建一個(gè)capt$sql的表,用來(lái)記錄ddl的記錄
2、sp_write_log原本是一個(gè)寫日志的過(guò)程,可以置換為自己的需要,如null跳過(guò)。
轉(zhuǎn)載于:https://www.cnblogs.com/fanweisheng/p/11113426.html
總結(jié)
以上是生活随笔為你收集整理的oracle怎么捕获表上的DML语句(不包括select)语句)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vuex modules 命名空间
- 下一篇: Python 优先级