首页 文章

存储在Oracle中的存储过程的object_id在哪里?

提问于
浏览
2

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

  • All_procedures

  • User_obects

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 .

2 回答

  • 3

    我与之交谈过的一些PL / SQL程序员告诉我,程序包下的SP /函数不被视为对象 . 我想了解原因 .

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

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

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

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

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

  • 0

    我不会对第一点发表评论,因为我不了解Oracle的设计文档和思考过程 . 我相信,由于包中定义的过程和函数包含在包中并依赖于它们,因此它们不会被赋予对象ID .

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

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

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

    往上看 .

相关问题