- ベストアンサー
PL/SQL 実行中のSIDを取得する方法
- 自作のストアドプロシージャで実行中の関数のSIDを取得する方法を知りたいです。
- DBMS_**** パッケージの使用例を紹介するので、関数の実行時にSIDと関数名を取得できる方法を教えてください。
- PL/SQLで特定の関数の実行時に実行中のセッションのSIDと関数名を記録する方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
dda167さん 蛇足や余計なお世話などではありませんね。 質問者さんの欲しい値を取るには、 select SYS_CONTEXT ('USERENV', 'SID') from dual; こちらですね・・・ ご指摘ありがとうございました。 また、関数名について回答していませんでした。 確実に使えるかは分からないですが、DBMS_UTILITY.FORMAT_CALL_STACKの戻り値のコールスタックの内容から取得できるかもしれません。 当方の環境(10g XE)で少し試してみました。 インデントしていないので見づらいですが・・ --ストアド名を返すファンクション create or replace function get_name return varchar2 is callstack varchar2(2000); currentname varchar2(2000); begin callstack := DBMS_UTILITY.FORMAT_CALL_STACK; /* コールスタックの最初には、このファンクション自身の情報が入っているため 2つ目のストアド名を取得する */ currentname := regexp_substr(callstack, 'procedure.+$|function.+$|package.+$',1,2,'im'); return currentname; end; / --上記ファンクションを呼ぶだけのファンクション create or replace function func_a return number is begin dbms_output.put_line(get_name); return 0; end; / --プロシージャ create or replace procedure proc_a is begin dbms_output.put_line(get_name); end; / --パッケージ create or replace package pack_a is procedure proc_a; end; / create or replace package body pack_a is procedure proc_a is begin dbms_output.put_line(get_name); end; end; / --無名ブロックで上記ファンクションらを実行 set serveroutput on declare w_num number; begin w_num := func_a; --function スキーマ名.FUNC_A proc_a; --procedure スキーマ名.PROC_A pack_a.proc_a; --package body スキーマ名.PACK_A end; / set serveoutput off 無名ブロックのコード内にある、コメントの内容が出力されました。 パッケージの場合は、プロシージャ名までは取得できないようです。 参考になれば幸いです。
その他の回答 (2)
- dda167
- ベストアンサー率76% (55/72)
蛇足(余計なお世話)ですが SYS_CONTEXTで取得するSESSIONIDは、V$SESSIONのAUDSIDです。 念のためです。失礼しました。
- yamada_g
- ベストアンサー率68% (258/374)
select SYS_CONTEXT ('USERENV', 'SESSIONID') from dual; でセッションIDが取得できます。 http://docs.oracle.com/cd/E16338_01/server.112/b56299/functions184.htm
お礼
詳しい情報をありがとうございました これからいろいろと試してみたいと思います