2012-07-24 34 views

回答

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> 
+0

我試過這個,不幸的是,似乎ora_sql_txt函數只能在系統事件觸發器中工作(如這裏所述:http://www.orafaq.com/forum/mv/msg/90623/272957/0/#msg_272957) 。 – JCD70 2012-07-24 14:24:43

+0

也許有一種方法可以使用de V $視圖來做到這一點? – JCD70 2012-07-24 14:25:47

0

爲什麼不使用審計聲明?它允許您根據表監視實例更新。