1

列ステータスを持つテーブル従業員が 1 人いますが、問題は誰か (パッケージまたはトリガーである可能性があります) がステータス値を更新することです。ユーザー ID とプログラミング ユニット情報に関する情報を取得する方法。

このテーブルで更新するためのテーブルにトリガーを作成するソリューションが1つあり、次のクエリからユーザーに関する情報を取得します

ユーザー、ユーザーマシン、およびセッション情報に関する情報を選択します

select  s.sid
    ,   s.username
    ,   s.machine
    ,   s.program
    ,   s.module
    ,   s.event
    ,   s.service_name 
    ,   sh.USER_ID
    ,   sqls.sql_text
from SYS.V_$SESSION s
    ,V$ACTIVE_SESSION_HISTORY sh
    ,V$SQL sqls
    ,v$sqlarea sa
    ,v$sqlarea sap
where s.sid=sh.session_id
    and sqls.sql_id=sh.sql_id
    and UPPER(SQLS.SQL_TEXT) like '%UPDATE ABCD%STATUS%6%'
    and S.PREV_SQL_ID = SAP.SQL_ID (+)
    and sqls.sql_id = sa.sql_id (+)

しかし問題は、このテーブルを更新しているプログラム単位情報を取得する方法ですか?

4

1 に答える 1

0

MODULEACTIONCLIENT_INFOの列を見てくださいV$SESSION

次に、更新を実行していると思われるパッケージおよび/またはトリガーで、DBMS_APPLICATION_INFO.SET_MODULEandを呼び出しDBMS_APPLICATION_INFO.SET_ACTIONます。

BEGIN
  DBMS_APPLICATION_INFO.SET_MODULE(trigger_name, 'trigger start');
  -- some code...
  DBMS_APPLICATION_INFO.SET_ACTION('updating employee');
  -- code which updates the employee table
  DBMS_APPLICATION_INFO.SET_ACTION('doing something else');
  -- more code...
  DBMS_APPLICATION_INFO.SET_MODULE(NULL, NULL);
END;

使用上の注意に記載されている例も参照してください。

于 2013-08-07T13:17:02.800 に答える