1

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

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

在包 B 的过程中,是否有可能知道过程已从包 A 中调用?


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

我很感激。

4

3 回答 3

4

您可以使用who_called_me从 Oracle 提供的包中调用的过程OWA_UTIL

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

于 2009-04-22T01:31:37.657 回答
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
于 2009-04-21T18:41:22.010 回答
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
于 2009-04-21T19:16:34.280 回答