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;
/

然后在 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将是包名称而不是过程名称。

还要注意不要EXEC在 PL/SQL 块中使用。 EXEC是一个 SQL*Plus 命令。你只需other_sproc像我在这里做的那样打电话。

于 2012-12-11T19:19:46.287 回答