2012-07-11 92 views
6

我有程序包,在許多地方和某些需要稍微不同的程序的地方使用程序。更新一列。如何檢查程序包中是否存在程序?

我認爲我可以創建一個額外的包,它將包含一些但不是全部的過程。

是否有任何方法直接在腳本中檢查if語句,如果在額外的程序包中不存在過程,要退回到標準程序包?

回答

11

您應該能夠從DBA_PROCEDURES視圖獲取此信息:

SELECT * 
    FROM SYS.DBA_PROCEDURES 
    WHERE OBJECT_TYPE = 'PACKAGE' AND 
     OBJECT_NAME = '<your package name>' AND 
     PROCEDURE_NAME = '<your procedure name>' 

如果返回的行包中的存在,你有興趣的過程。如果您得到NO_DATA_FOUND異常,則意味着程序包不存在於程序包中。

分享和享受。

-1
select * from USER_OBJECT where object_type='PACKAGE' AND OBJECT_NAME ='<YOUR PACKAGE NAME>' 
2

查詢SYS.DBA_PROCEDURES的用戶是否需要特殊權限?也許查詢SYS.User_Objects需要較少的權限?

select * from SYS.User_Objects where object_type = 'PACKAGE'; 
1

您也可以嘗試

SELECT text FROM all_source WHERE name = 'PACKAGE' ORDER BY line; 

爲我工作...

相關問題