2017-11-29 4 views
1

パッケージPACKTESTコードが暗号化されています。my関数というプロシージャは、ストアドプロシージャの名前をどのように出力しますか? who_called_meが唯一の行番号にプロシージャ名の取得方法

OWA_UTIL.who_called_me(l_owner, l_name, l_lineno, l_type); 
dbms_output.put_line(l_owner || '.' || l_name||' '||l_type||' '||l_lineno); 

SCOTT.PACKTEST PACKAGE BODY 112

+0

を暗号化されている場合は、私を呼ばれる方は、下記をご確認ください(https://stackoverflow.com/questions/14554891/capture-package-procedure-a-triggerからの関数名) –

答えて

0

を印刷することができますあなたのパッケージのコードが暗号化されているという主張は、あなたがの「ポスト」コンパイルされたバージョンを見ている場合疑問に私をリードその包み。それは暗号化されていないので、人間が読むことを意図したものではありません。それはマシンコードです。 DIANAかmコードのどちらかです。 (PL/SQL Language Referenceまたはstack overflow hereを参照してください。)その時点で、DIANAノードを置き換えたソースコード名、または内部アドレスによってソースコード名が存在しなくなりました。 who-called-meルーチンは、実行スタックを使用して、呼び出しルーチンの実際の行番号を取得します。内部ルーチン名が必要な場合:

  1. パッケージのソースコードを読んで解析します。
  2. あなたのパッケージでは、エントリに名前をプッシュして終了時にポップするルーチン名(コレクション)のスタックを保ちます。

どちらも簡単な作業ではありません。運が良かった。

0

ジャスト手順は、[トリガーからのキャプチャパッケージ/プロシージャ/関数名]の可能性のある重複

SELECT * FROM ALL_DEPENDENCIES WHERE 
NAME='PACKTEST'; 
関連する問題