我正在比較三個Oracle模式。獲取Oracle數據庫中所有功能和過程的列表
我想獲得每個數據庫中使用的所有函數和過程的列表。這可能通過查詢嗎? (最好包括一個標誌,以確定它們是否編譯)
理想情況下,使用帶有標誌的單個查詢來表明函數/過程是否在每個模式中是理想的。但即使只是第一位也會比手動檢查每個模式更好。
我正在比較三個Oracle模式。獲取Oracle數據庫中所有功能和過程的列表
我想獲得每個數據庫中使用的所有函數和過程的列表。這可能通過查詢嗎? (最好包括一個標誌,以確定它們是否編譯)
理想情況下,使用帶有標誌的單個查詢來表明函數/過程是否在每個模式中是理想的。但即使只是第一位也會比手動檢查每個模式更好。
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE')
STATUS列告訴你對象是有效還是無效。如果它無效,你必須嘗試重新編譯,ORACLE不能告訴你它是否會工作。
對dba_arguments,dba_errors,dba_procedures,dba_objects,dba_source,dba_object_size進行描述。 其中每個都有用於查看過程和功能的圖片的一部分。 。
而且在DBA_OBJECTS的OBJECT_TYPE的包是用於定義和「PACKAGE BODY」爲 「一攬子」身體
如果你在同一個數據庫比較模式然後嘗試:
select * from dba_objects
where schema_name = 'ASCHEMA'
and object_type in ('PROCEDURE', 'PACKAGE', 'FUNCTION', 'PACKAGE BODY')
minus
select * from dba_objects
where schema_name = 'BSCHEMA'
and object_type in ('PROCEDURE', 'PACKAGE', 'FUNCTION', 'PACKAGE BODY')
並切換ASCHEMA和BSCHEMA的訂單
如果您還需要查看觸發器並在模式之間比較其他內容,則應該查看Article on Ask Tom about comparing schemas
[''TABLE''](https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:941629680330#3455235608260)有人可以給一個提示如何刪除函數/程序/包? – Bitterblue
'drop function xxx','drop procedure xyz','drop package foobar' –
有人建議對我的回答進行編輯,這樣'SELECT'語句只會選擇'OBJECT_NAME'而不是'*'。無論如何,這個編輯已被拒絕(除我以外的評論者); IMO至少應該選擇「OBJECT_NAME,OBJECT_TYPE,STATUS」來獲得有用的輸出。也就是說,'SELECT *'在這種情況下不會受到傷害。 –