Oracle 查詢某一個包體’PACKAGE BODY‘中包含PROCEDURE/FUNCTION的名稱有哪些

maohaiqing0304發表於2014-09-11


標題: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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章