是否可以知道程序被调用的是哪个包?

时间:2009-04-21 18:24:29

标签: oracle plsql stack packages

假设我有2个包:A和B.

在包A中,我调用包B中的过程。

在包装箱B的程序中,是否可以知道从包装A调用了程序?


非常感谢您提供这些信息。这非常有启发性。

我很感激。

3 个答案:

答案 0 :(得分:4)

您可以使用Oracle提供的包who_called_me

中名为OWA_UTIL的过程

http://download.oracle.com/docs/cd/B25221_04/web.1013/b25598/psutil.htm#i1006497

答案 1 :(得分:3)

您可以解析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

答案 2 :(得分:3)

您可以将名称作为参数传递吗?

使用....

$$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