需求:
客户需要统计下某环境中包体’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';
祝好~
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28602568/viewspace-1267884/
,如需转载,请注明出处,否则将追究法律责任。