假设我有 2 个包:A 和 B。
在包 A 中,我调用包 B 中的过程。
在包 B 的过程中,是否有可能知道过程已从包 A 中调用?
非常感谢您提供这些信息。这很有启发性。
我很感激。
您可以使用who_called_me
从 Oracle 提供的包中调用的过程OWA_UTIL
http://download.oracle.com/docs/cd/B25221_04/web.1013/b25598/psutil.htm#i1006497
您可能能够解析该DBMS_UTILITY.FORMAT_CALL_STACK()
函数返回的文本。
编辑:我尝试创建一些测试包。我在 XX_TESTA 包中有一个过程调用 XX_TESTB 包中的另一个。XX_TESTB 中的过程只是将返回的文本打印DBMS_UTILITY.FORMAT_CALL_STACK()
到输出。这是结果文本:
----- PL/SQL Call Stack -----
object line object
handle number name
416fe0e68 5 package body APPS.XX_TESTB
415182f10 5 package body APPS.XX_TESTA
416e9b448 3 anonymous block
您可以将名称作为参数传递吗?
使用....
$$PLSQL_UNIT
来自: http ://awads.net/wp/2006/08/03/heres-a-quick-way-to-get-the-line-number-in-plsql
EDDIE@XE> CREATE OR REPLACE PACKAGE my_pkg
2 IS
3 PROCEDURE my_proc;
4 END;
5 /
Package created.
EDDIE@XE> CREATE OR REPLACE PACKAGE BODY my_pkg
2 IS
3 PROCEDURE my_proc
4 IS
5 BEGIN
6 DBMS_OUTPUT.put_line ('Line number: ' || $$plsql_line);
7 DBMS_OUTPUT.put_line ( 'Unit: '
8 || $$plsql_unit
9 );
10 END;
11 END;
12 /
Package body created.
EDDIE@XE> exec my_pkg.my_proc;
Line number: 6
Unit: MY_PKG