获取调用我的过程的嵌套过程的名称

Get name of nested procedure that called my procedure

我是 PL 的新手 SQL,我想知道有没有一种方法 (method/function/etc) 可以获取调用我的过程的嵌套过程的名称?

例如,我有 my_procedure,它被嵌套在 another_package 中的 another_procedure 调用。我想要在 my_procedure 中实现的 funciton/method 每次 告诉我哪个嵌套过程调用 my_procedure,在这个例子中,[=25] =].

我正在使用 owa_util.who_called_me 来获取包和所有者名称。

演示程序:

create or replace procedure demo
as
    k_this   constant varchar2(300) := utl_call_stack.concatenate_subprogram(utl_call_stack.subprogram(1));
    k_caller constant varchar2(300) := utl_call_stack.concatenate_subprogram(utl_call_stack.subprogram(2));
begin
    dbms_output.put_line(k_this || ' called from ' || k_caller);
end demo;

调用它的包:

create or replace package testit
as
    procedure do_something;
end testit;
/

create or replace package body testit
as
    procedure do_something is
    begin
        demo;
    end do_something;
end testit;
/

测试:

begin
    testit.do_something;
end;
/

DEMO called from TESTIT.DO_SOMETHING