62

3 つの Oracle スキーマを比較しています。

各データベースで使用されているすべての関数と手順のリストを取得したいと考えています。これはクエリを介して可能ですか?(できれば、コンパイルするかどうかに関するフラグを含めます)

理想的には、関数/手順が各スキーマにあるかどうかを示すフラグを持つ単一のクエリを用意することは素晴らしいことです。ただし、最初のビットだけでも、各スキーマを手動で検査するよりも優れています。

4

3 に答える 3

131
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE')

列 STATUS は、オブジェクトが VALID か INVALID かを示します。無効な場合は、再コンパイルを試行する必要があります。ORACLE は以前に動作するかどうかを判断できません。

于 2009-11-30T12:14:22.460 に答える
9

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 のスキーマの比較に関する記事を参照してください。

于 2009-11-30T12:18:18.667 に答える
2
 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

于 2020-07-27T07:55:33.583 に答える