2

我是 PL/SQL 的初学者,所以我不知道这个问题是否有意义。我试图找出 Oracle 11g 中包下(而不是模式下)的存储过程的 object_id。我尝试查询以下我认为应该包含 SP 的 object_Id 的系统表/视图。

  1. All_procedures
  2. 用户对象

All_procedures 视图确实包含我正在寻找的 SP 的名称,但它只包含包的对象 ID。我想在一个包下找到存储过程的 object_id 的原因是:

  1. 与我交谈过的一些 PL/SQL 程序员告诉我,包下的 SP/Function 不被视为对象。我想明白为什么。

  2. 我想知道,这个 SP 在同一个包下有多少其他 SP 被引用。我希望 public_dependency 视图包含这个映射,除非有人告诉我这是错误的视图。

  3. 如果 SP/Function 未标识为包下的对象,那么如何获取引用特定 SP 的 SP 列表?

我在 Stackoverflow 中发布了另一个问题,这使我找到了链接如何以编程方式识别存储过程的依赖项?. 但是这篇文章中提到的脚本对我没有帮助,因为 user_objects 在包下没有存储过程的任何条目。它只有架构下的 SP。

4

2 回答 2

3

与我交谈过的一些 PL/SQL 程序员告诉我,包下的 SP/Function 不被视为对象。我想明白为什么。

oracle 数据库中的包是模式单元,它对逻辑相关的对象(例如类型、变量、过程和函数)进行分组。它们被认为是原子单元,如果一个包中的某个过程引用另一个包中的另一个过程,我们就会遇到第一个包本身引用第二个包的情况。所以,这里的最小对象是包本身,而不是包中的过程或类型或其他东西。

我想知道,这个 SP 在同一个包下有多少其他 SP 被引用。我希望 public_dependency 视图包含这个映射,除非有人告诉我这是错误的视图。

我从来没有遇到过如何获得它的信息。如果引用在包内,我认为包是独立对象。

如果 SP/Function 未标识为包下的对象,那么如何获取引用特定 SP 的 SP 列表?

您需要使用包含源代码的视图,例如user_source/all_source/dba_source

于 2013-05-17T06:29:27.343 回答
0

我不会评论第一点,因为我不了解 Oracle 的设计文档和思维过程。我相信由于包中定义的过程和功能包含在包中并依赖于它们,因此它们没有被分配对象ID。

我想知道,这个SP在同一个包下有多少其他SP被引用

最简单的方法是根据您的访问权限查询user_source// all_sourcedba_source由于这些视图包含所有源代码,因此您必须提供适当的过滤器。

如果 SP/Function 未标识为包下的对象,那么如何获取引用特定 SP 的 SP 列表?

往上看。

于 2013-05-17T05:52:31.190 回答