インストール・スクリプトについて
インストール・スクリプトには、アプリケーションの作成に必要なすべてのSQL文または他のマスター・スクリプトを設定できます。
スクリプトは、名前が.sqlで終わるファイル(たとえば、create_app.sql)の一連のSQL文ですSQL*PlusまたはSQL Developerなどのクライアント・プログラムのスクリプトを実行すると、SQL文がスクリプトの表示順に実行されます。SQL文がアプリケーションを作成するスクリプトは、インストール・スクリプトと呼ばれます。
アプリケーションをデプロイするには、デプロイメント環境で1つ以上のインストール・スクリプトを実行します。新しいアプリケーションでは、インストール・スクリプトを作成する必要があります。古いアプリケーションでは、インストール・スクリプトが存在する可能性がありますが、存在しない場合は作成できます。
DDL文とスキーマ・オブジェクトの依存性について
インストール・スクリプトには、スキーマ・オブジェクトを作成するDDL文およびオプションでDDL文が作成する表にデータをロードするINSERT文が含まれます。インストール・スクリプトを正確に作成し、正しい順序で複数のインストール・スクリプトを実行するには、アプリケーションのスキーマ・オブジェクト間の依存性を理解する必要があります。
オブジェクトAがオブジェクトBを参照する場合、AがBに依存する関係になります。つまり、BはAよりも先に作成される必要があります。そうでないと、Bを作成する文が失敗するか、または作成されても無効な状態になります(オブジェクト・タイプによる)。
複雑なアプリケーションの場合、オブジェクトを作成する順序ははっきりしていません。データベースの設計者に問い合せるか設計のダイアグラムを参照してください。
関連情報:
-
スキーマ・オブジェクトの依存関係の詳細は、『Oracle Database開発ガイド』を参照してください。
INSERT文と制約について
INSERT文を含むインストール・スクリプトを実行する場合、ソース表(開発環境)のデータをデプロイメント環境の既存の新規表に挿入するときに違反となる可能性のある制約があるか確認する必要があります。
アプリケーションの各ソース表に対して、ソース表のデータを新規表に挿入したとき、制約を違反するかどうかを判断する必要があります。違反がある場合、まず制約を無効にしてからデータを挿入し、制約を再度有効にします。データ項目に制約違反がある場合、そのデータ項目を修正するまで、制約を再度有効にすることはできません。
「データのロード」に示すように、参照データを単純に挿入する場合は、制約違反は起こりません。このため最初に制約を無効にする必要はありません。
外部ソース(ファイル、スプレッドシートまたは古いアプリケーションなど)からデータを挿入する場合、または依存データが多くある多数の表からデータを挿入する場合は、データを挿入する前に制約を無効にします。
制約は、次の方法で無効化および再有効化できます。
-
SQL Developerを使用して、制約の無効化と再度有効化を一度に実行します。
-
「接続」フレームで、適切な表を選択します。
-
表名のラベルが付いたペインで、サブタブ「制約」を選択します。
-
すべての表の制約のリストで、
ENABLEDをDISABLED(またはその逆)に変更します。
-
-
インストール・スクリプトを編集して、各制約を無効化し再度有効化するSQL文を追加します。
-
各制約を無効化し再度有効化するSQL文を使用してSQLスクリプトを作成します。
-
Oracle Databaseデータ・ディクショナリで制約を検索して、各制約を無効化および有効化するSQL文を使用してSQLスクリプトを作成します。
たとえば、「表の作成」からEVALUATIONS、PERFORMANCE_PARTS、およびSCORE表で使用される制約を検索または有効化するには、ワークシートで次の文を入力します。
SELECT 'ALTER TABLE '|| TABLE_NAME || ' DISABLE CONSTRAINT '|| CONSTRAINT_NAME ||';' FROM user_constraints WHERE table_name IN ('EVALUATIONS','PERFORMANCE_PARTS','SCORES'); SELECT 'ALTER TABLE '|| TABLE_NAME || ' ENABLE CONSTRAINT '|| CONSTRAINT_NAME ||';' FROM user_constraints WHERE table_name IN ('EVALUATIONS','PERFORMANCE_PARTS','SCORES');関連情報: