我有程序包,在許多地方和某些需要稍微不同的程序的地方使用程序。更新一列。如何檢查程序包中是否存在程序?
我認爲我可以創建一個額外的包,它將包含一些但不是全部的過程。
是否有任何方法直接在腳本中檢查if
語句,如果在額外的程序包中不存在過程,要退回到標準程序包?
我有程序包,在許多地方和某些需要稍微不同的程序的地方使用程序。更新一列。如何檢查程序包中是否存在程序?
我認爲我可以創建一個額外的包,它將包含一些但不是全部的過程。
是否有任何方法直接在腳本中檢查if
語句,如果在額外的程序包中不存在過程,要退回到標準程序包?
您應該能夠從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異常,則意味着程序包不存在於程序包中。
分享和享受。
select * from USER_OBJECT where object_type='PACKAGE' AND OBJECT_NAME ='<YOUR PACKAGE NAME>'
查詢SYS.DBA_PROCEDURES的用戶是否需要特殊權限?也許查詢SYS.User_Objects需要較少的權限?
select * from SYS.User_Objects where object_type = 'PACKAGE';
您也可以嘗試
SELECT text FROM all_source WHERE name = 'PACKAGE' ORDER BY line;
爲我工作...