現在実行中のストアド プロシージャの名前を格納する変数名はありますか? Unix の $0 に似たもの。
CREATE OR REPLACE
PROCEDURE my_sproc(
param1 IN NUMBER,
)
AS
BEGIN
exec other_sproc(XXX);
END;
END;
XXX <- 文字列「my_sproc」を格納します。
Oracle のバージョンによっては、条件付きコンパイルと$$PLSQL_UNIT
other_sproc
渡された値を出力するだけの場合
create or replace procedure other_sproc( p_in in varchar2 )
as
begin
dbms_output.put_line( p_in );
end;
/
$$PLSQL_UNIT
次に、Oracle 11g では、呼び出し元で使用できます
SQL> create or replace procedure my_sproc
2 as
3 begin
4 other_sproc( $$PLSQL_UNIT );
5 end;
6 /
Procedure created.
SQL> exec my_sproc;
MY_SPROC
PL/SQL procedure successfully completed.
ただし、パッケージを使用している場合 (ストアド プロシージャはほとんど常にパッケージに含まれている必要があります) はうまく機能しません。これは$$PLSQL_UNIT
、 がプロシージャ名ではなくパッケージ名になるためです。
EXEC
PL/SQL ブロックで は使用しないことにも注意してください。EXEC
SQL*Plus コマンドです。私がここでしているように、あなたは単に電話other_sproc
してください。