是否有一个变量名存储当前运行的存储过程的名称?类似于 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;
/
然后在 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
像我在这里做的那样打电话。