3つの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」、本体が「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の順序を入れ替えます。
トリガーを調べたり、スキーマ間で他のものを比較したりする必要がある場合は、 スキーマの比較に関するTomの記事 をご覧ください。