0

現在実行中のストアド プロシージャの名前を格納する変数名はありますか? Unix の $0 に似たもの。

CREATE OR REPLACE
PROCEDURE my_sproc(
  param1 IN NUMBER,
  )
  AS      
  BEGIN
    exec other_sproc(XXX);
  END;
END;

XXX <- 文字列「my_sproc」を格納します。

4

1 に答える 1

3

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、 がプロシージャ名ではなくパッケージ名になるためです。

EXECPL/SQL ブロックで は使用しないことにも注意してください。EXECSQL*Plus コマンドです。私がここでしているように、あなたは単に電話other_sprocしてください。

于 2012-12-11T19:19:46.287 に答える