データのインポートをした時に、他のオブジェクトが不足しているためにVIEWなどが有効にならないときがあります。
そういう場合は、VIEWなどを再コンパイルすることで使用可能になりますが、
1つずつ再コンパイルするSQLを流すのは非常に面倒くさいです。
それを一括で行う方法を紹介します。
やり方としては、オブジェクト情報を取得し、プログラム的にループでSQLを実行していくものです。
コンパイルが必要なものはuser_objectsテーブルのstatusがinvalidになっているものです。
事前準備
SQLPlusを起動し、再コンパイルしたいオブジェクトを保有しているユーザーでログインします。
出力の制限を上げるために次の設定を実行しておきます。
set serveroutput on size 10000;
一括コンパイルスクリプト
VIEW
begin for cur in (select object_name, object_type from user_objects where object_type = 'VIEW' and status = 'INVALID') loop dbms_output.put_line(cur.object_name); execute immediate 'alter ' || cur.object_type || ' ' || cur.object_name || ' compile'; end loop; end; /
SYNONYM
begin for cur in (select object_name, object_type from user_objects where object_type = 'SYNONYM ' and status = 'INVALID') loop dbms_output.put_line(cur.object_name); execute immediate 'alter ' || cur.object_type || ' ' || cur.object_name || ' compile'; end loop; end; /
FUNCTION
begin for cur in (select object_name, object_type from user_objects where object_type = 'FUNCTION' and status = 'INVALID') loop dbms_output.put_line(cur.object_name); execute immediate 'alter ' || cur.object_type || ' ' || cur.object_name || ' compile'; end loop; end; /
PROCEDURE
begin for cur in (select object_name, object_type from user_objects where object_type = 'PROCEDURE' and status = 'INVALID') loop dbms_output.put_line(cur.object_name); execute immediate 'alter ' || cur.object_type || ' ' || cur.object_name || ' compile'; end loop; end; /
PACKAGE
begin for cur in (select object_name, object_type from user_objects where object_type = 'PACKAGE ' and status = 'INVALID') loop dbms_output.put_line(cur.object_name); execute immediate 'alter ' || cur.object_type || ' ' || cur.object_name || ' compile'; end loop; end; /
全オブジェクト
begin for cur in (select object_name, object_type from user_objects where status = 'INVALID') loop dbms_output.put_line(cur.object_name); execute immediate 'alter ' || cur.object_type || ' ' || cur.object_name || ' compile'; end loop; end; /
TABLE、SEQUENCEを一括で削除する場合はこちらを参考にして下さい。
基礎からのOracle (DVD付) (プログラマの種シリーズ) 西沢 夢路 ソフトバンククリエイティブ 2010-05-28 売り上げランキング : 143286 Amazonで詳しく見る |