Oracle DB:获取触发特定更新的查询

时间:2012-07-24 09:31:57

标签: oracle oracle11g

我想监控数据库中的某些字段;当SQL查询更新具有特定值的字段时,我想记录触发更新的查询。

我该怎么做?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

好问题。让我很好奇。我找到了答案here。 那里还提到了一个LOGMINER实用程序。也许值得研究一下?

SQL> CREATE OR REPLACE FUNCTION cur_sql_txt
  2    RETURN CLOB
  3  AS
  4    v_cnt BINARY_INTEGER;
  5    v_sql ORA_NAME_LIST_T;
  6    v_rtn CLOB;
  7  BEGIN
  8    v_cnt := ora_sql_txt (v_sql);
  9    FOR l_bit IN 1..v_cnt LOOP
 10      v_rtn := v_rtn || RTRIM (v_sql (l_bit), CHR (0));
 11    END LOOP;
 12    RETURN RTRIM (v_rtn, CHR (10)) || ';';
 13  END;
 14  /

Function created.

SQL> CREATE OR REPLACE TRIGGER trigger_name
  2    BEFORE UPDATE ON emp
  3    FOR EACH ROW
  4  BEGIN
  5    DBMS_OUTPUT.PUT_LINE (cur_sql_txt);
  6  END;
  7  /

Trigger created.

SQL> SET SERVEROUTPUT ON;
SQL> UPDATE emp
  2  SET    empno = empno,
  3         ename = ename
  4  WHERE  ROWNUM = 1;
UPDATE emp
SET    empno = empno,
       ename = ename
WHERE  ROWNUM =
:"SYS_B_0";

1 row updated.

SQL>

答案 1 :(得分:0)

为什么不使用审计声明?它允许您监视针对表的实例更新。