Oracle 是否存在存储当前运行的存储过程名称的变量名?

Oracle 是否存在存储当前运行的存储过程名称的变量名?,oracle,plsql,Oracle,Plsql,是否存在存储当前运行的存储过程名称的变量名?类似于Unix中的$0 CREATE OR REPLACE PROCEDURE my_sproc( param1 IN NUMBER, ) AS BEGIN exec other_sproc(XXX); END; END; XXX根据Oracle版本的不同,您可以使用条件编译和$$PLSQL\u单元 Ifother_存储过程只打印传入的值 create or replace procedure other_sp

是否存在存储当前运行的存储过程名称的变量名?类似于Unix中的$0

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

XXX根据Oracle版本的不同,您可以使用条件编译和
$$PLSQL\u单元

If
other_存储过程
只打印传入的值

create or replace procedure other_sproc( p_in in varchar2 )
as
begin
  dbms_output.put_line( p_in );
end;
/
然后在Oracle 11g中,您可以在调用者中使用
$$PLSQL\u UNIT

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\u单元
将是包名而不是过程名


还要注意,在PL/SQL块中不使用
EXEC
EXEC
是一个SQL*Plus命令。您只需像我在这里一样调用
其他存储过程

根据Oracle版本的不同,您可以使用条件编译和
$$PLSQL\u单元

If
other_存储过程
只打印传入的值

create or replace procedure other_sproc( p_in in varchar2 )
as
begin
  dbms_output.put_line( p_in );
end;
/
然后在Oracle 11g中,您可以在调用者中使用
$$PLSQL\u UNIT

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\u单元
将是包名而不是过程名

还要注意,在PL/SQL块中不使用
EXEC
EXEC
是一个SQL*Plus命令。您只需像我在这里一样调用
other\u存储过程