ITPub博客

首页 > 数据库 > Oracle > Oracle 查找某一个包体’PACKAGE BODY‘中包含PROCEDURE/FUNCTION的名称有哪些

Oracle 查找某一个包体’PACKAGE BODY‘中包含PROCEDURE/FUNCTION的名称有哪些

原创 Oracle 作者:maohaiqing0304 时间:2014-09-11 17:22:00 4 删除 编辑


标题:Oracle 查找某一个包体PACKAGE BODY‘包含PROCEDURE/FUNCTION的名称有哪些

作者:lōττéry©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]



需求:
  客户需要统计下某环境中包体PACKAGE BODY‘包含PROCEDURE/FUNCTION的名称有哪些
  例如:PACKAGE BODY‘ 名称PKG_B,包含一个PT_1'PROCEDURE'和FN_1‘FUNCTION’
  需要显示结果
OWNER
OBJECT_NAME
OBJECT_TYPE
TYPE
PROCEDURE#
PROCEDURENAME
LOTTERY
PGK_ES
PACKAGE
PROCEDURE
1
PT_1
LOTTERY
PGK_ES
PACKAGE
FUNCTION
2
FN_1
    注释:包和包体一一对应;

查询SQL:
SELECT O.OWNER       对象所属者,
       O.OBJECT_NAME 包名,
       --O.OBJECT_TYPE ,
       ( CASE
         WHEN S.PROPERTIES = 27131904 THEN
          'FUNCTION'
         WHEN S.PROPERTIES = 29229056 THEN
          'PROCEDURE'
         ELSE
          TO_CHAR(S.PROPERTIES)
       END ) 包体下对象类型,
       /*本人环境 PROPERTIES值代表意义
        27131904==>FUNCTION;
        29229056==>PROCEDURE;
       没确定PROPERTIES ==> 29229056、27131904 2值依据哪里查到的.该部分需要根据环境情况哈~*/
       S.PROCEDURE#    对象顺序,
       S.PROCEDURENAME 对象名称
  FROM SYS.PROCEDUREINFO$ S --所有存储(包括PACKAGE里的PROCEDURE/FUNCTION...)
  JOIN DBA_OBJECTS O
   ON O.OBJECT_ID = S.OBJ#
   AND O.OWNER = 'LOTTERY'
   AND O.OBJECT_TYPE = 'PACKAGE' -- 对象类型为PACKAGE包 
  ORDER BY O.OBJECT_NAME, S.PROCEDURE#;

注释:
     --PROCEDUREINFO$基表(普通堆表)用于存放独立的或程序包中PROCEDURE或FUNCTION的详细信息,包括NAME名字和属性
     本文只针对OBJECT_TYPE = PACKAGE,若想显示某用户下所有PROCEDURE对象有哪些
     可以选择如下方式..等
     1)本文SQL的将AND O.OBJECT_TYPE = 'PACKAGE'改为 AND O.OBJECT_TYPE = 'PROCEDURE' 
     2)查询‘USER_OBJECTS’ SQL:SELECT * FROM USER_OBJECTS O WHERE O.OBJECT_TYPE = 'PROCEDURE';
     3)查询‘USER_SOURCE’  SQL:SELECT * FROM USER_SOURCE O WHERE O.TYPE = 'PROCEDURE';


祝好~




此条目发表在 SQL篇 分类目录。将固定连接加入收藏夹。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28602568/viewspace-1267884/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
擅长SQL编写及SQL优化,分析瓶颈,性能调优、故障处理,根据实际情况定制备份策略; 擅长编写脚本来实现自动化功能,600+SQL优化经验案例,为人热爱学习,喜欢钻研技术,对工作认真负责。

注册时间:2013-03-13

  • 博文量
    121
  • 访问量
    2295203