2

データベースのいくつかのフィールドを監視したいと思います。SQL クエリがそのフィールドを特定の値で更新すると、更新をトリガーしたクエリをログに記録したいと思います。

どうやってやるの ?

前もって感謝します!

4

2 に答える 2

1

良い質問。好奇心をそそられました。ここで答えを見つけました。そこには 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>
于 2012-07-24T11:24:24.510 に答える
0

監査ステートメントを使用しないのはなぜですか? テーブルに対するインスタンスの更新を監視できます。

于 2012-07-31T03:56:46.217 に答える