3 つの Oracle スキーマを比較しています。
各データベースで使用されているすべての関数と手順のリストを取得したいと考えています。これはクエリを介して可能ですか?(できれば、コンパイルするかどうかに関するフラグを含めます)
理想的には、関数/手順が各スキーマにあるかどうかを示すフラグを持つ単一のクエリを用意することは素晴らしいことです。ただし、最初のビットだけでも、各スキーマを手動で検査するよりも優れています。
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE')
列 STATUS は、オブジェクトが VALID か INVALID かを示します。無効な場合は、再コンパイルを試行する必要があります。ORACLE は以前に動作するかどうかを判断できません。
dba_arguments、dba_errors、dba_procedures、dba_objects、dba_source、dba_object_size について記述します。これらのそれぞれには、手順と機能を確認するための図の一部があります。
また、パッケージの dba_objects の object_type は、定義が「PACKAGE」、本体が「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 の順序を入れ替えます。
トリガーを見て、スキーマ間で他のものを比較する必要がある場合は、Ask Tom のスキーマの比較に関する記事を参照してください。
SELECT * FROM all_procedures WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE')
and owner = 'Schema_name' order by object_name
ここで「Schema_name」はスキーマの名前です。たとえば、PMIS という名前のスキーマがあるので、例は次のようになります。
SELECT * FROM all_procedures WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE')
and owner = 'PMIS' order by object_name
参照: https://www.plsql.co/list-all-procedures-from-a-schema-of-oracle-database.html