で呼び出し元のパッケージ/プロシージャを取得:私は次のインサートを持つテーブルへの書き込みのOracle 10gのログイン手順を書いているのOracle
INSERT INTO EXEC_LOG VALUES (
(SELECT SYS_CONTEXT('USERENV','SESSIONID') sessionid FROM dual),
strPackage, strProcedure, strEventType, strEventLevel, SYSDATE, strMessage
);
この手順は、複数の異なるパッケージ/手順で再利用されていますが、今のように、プログラマはパッケージ/プロシージャ名をロギングプロシージャ(strPackage
とstrProcedure
)に渡さなければなりません。
このプロシージャが呼び出されたパッケージ/プロシージャの種類を教えてくれるv $ビューまたはその他のものがある場合は、プログラマがstrPackage
とstrProcedure
を渡す必要はありません。
例:このパッケージから
BEGIN
log_test.testproc1;
log_test.testproc2;
END;
::私は、これら2つのプロシージャを呼び出す場合
CREATE OR REPLACE PACKAGE BODY log_test IS
PROCEDURE TestProc1 IS
BEGIN
write_exec_log(...);
END TestProc1;
PROCEDURE TestProc2 IS
BEGIN
write_exec_log(...);
END TestProc2;
END log_test;
私はlog_test
/TestProc1
とlog_test
/TestProc2
を評価できるようにしたいでしょうインサイドからwrite_exec_log
メソッド。
へのOracleのバージョンで動作しますプロシージャ名。この質問に例を追加しました。呼び出しスタックには 'log_test'が含まれていますが、' TestProc1'は含まれていません。 – Paul
パッケージから回線番号を取得できます。それは十分に近いですか? –
これはperformaceメトリックにも使用したいので、 'write_exec_log'が呼び出されたときにどのプロシージャが実行されているのか知りたいです。 – Paul