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

时间:2012-12-11 19:14:41

标签: oracle plsql

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

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

XXX< - 存储字符串“my_sproc”。

1 个答案:

答案 0 :(得分: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;
/

然后在Oracle 11g中,您可以在调用者中使用$$PLSQL_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_UNIT将是软件包名称而不是过程名称。

请注意,您不在PL / SQL块中使用EXECEXEC是SQL * Plus命令。你只需像我在这里一样打电话给other_sproc