我是PL / SQL的初学者,所以我不知道这个问题是否有意义。我试图找到Oracle 11g中的包(不在模式下)下的存储过程的object_id。我试图查询以下系统表/视图,我认为应该包含SP的object_Id。
All_procedures视图确实包含我要查找的SP的名称,但它只包含包的对象ID。我想在Package下找到存储过程的object_id的原因是:
我交谈过的一些PL / SQL程序员告诉我,程序包下的SP /函数不被视为对象。我想了解原因。
我想知道,在这个SP被引用的同一个包下有多少个其他SP。我希望public_dependency视图包含这个映射,除非有人告诉我这是错误的视图。
如果SP /功能未被识别为包下的对象,那么如何获取引用特定SP的SP列表。
我在Stackoverflow中发布了另一个问题,这导致我链接How do you programatically identify a stored procedure's dependencies?。但是这篇文章中提到的脚本对我没有帮助,因为user_objects没有包下的存储过程的任何条目。它只有Schema下的SP。
答案 0 :(得分:3)
我交谈过的一些PL / SQL程序员告诉我,程序包下的SP /函数不被视为对象。我想了解原因。
oracle数据库中的包是模式单元,它对逻辑上相关的对象(例如类型,变量,过程和函数)进行分组。它们被视为原子单元,如果包中的某些过程引用另一个包中的另一个过程,我们就会遇到第一个包本身引用第二个包的情况。因此,这里的最小对象是包本身,而不是包中的过程或类型或其他东西。
我想知道,在这个SP被引用的同一个包下有多少其他SP。我希望public_dependency视图包含这个映射,除非有人告诉我这是错误的视图。
我从来没有遇到过如何获得它的信息。如果引用在包内,那么包是我认为的独立对象。
如果SP /功能未被识别为包下的对象,那么如何获取引用特定SP的SP列表?
您需要使用包含源代码的视图,例如user_source/all_source/dba_source
答案 1 :(得分:0)
我不会对第一点发表评论,因为我不了解Oracle的设计文档&思考过程。我相信自从程序&包中定义的函数包含在包装中。依赖于它们,它们不会被赋予对象ID。
我想知道,在这个SP被引用的同一个包下有多少个其他SP
最简单的方法是根据您的访问权限查询user_source
/ all_source
/ dba_source
。由于这些视图包含所有源代码,因此您必须提供适当的过滤器。
如果SP /功能未被识别为包下的对象,那么如何获取引用特定SP的SP列表?
见上文。