![](https://blogimg.goo.ne.jp/user_image/4c/57/ca9122a4ce44349b07954a5924a49c28.png)
エンティティとリレーションの情報からOracle用のDDLを生成します。
また、旧システムのDB定義情報を指定することにより、その差分を検出して差分DDLの生成が可能です。
操作手順としては、①旧DB定義情報の作成⇒②DDL作成システムの指定⇒③DDL作成という手順になります。
①旧DB定義情報の作成
当サンプルの差分生成機能を使用するためには、最新のDB定義情報(XupperIIリポジトリ)と、差分を検出するための旧DB定義情報が必要です。
そのために以下のいずれかの方法により、旧DB定義情報を作成してください。
■現行Oracleデータベースからのリバース
XupperII本体機能を使用して、OracleデータベースからDB定義情報をXupperIIに取り込みます。
当サンプルの「DBから作成」により、旧DB定義情報を当サンプル用のフォーマットに変換します。
■旧システムの保管ファイルからの取り込み
旧DB定義が存在するXupperIIのシステムを保管しておき、そのシステムから上記1同様、当サンプルの「DBから作成」により、旧DB定義情報を当サンプル用のフォーマットに変換します。
■DDL生成した時点の旧DB定義情報を生成
プロジェクトの事情等により、XupperII本体でDDL生成した後に、そのまま二次開発する場合などで、ある時点でのDB定義情報を当サンプルの「DBから作成」を使用して、DB定義情報をExcelに出力後、保存しておきます。
差分生成する際に、そのDB定義情報を格納したExcelファイルを当サンプルの「参照」から指定します。
②DDL作成対象システムの指定
DDL生成対象システムにログインします。
③DDLの生成
DDLの差分を生成するために、以下の前提条件を設けています。
○物理名称は必須
エンティティの物理名(TABLE名として使用)、エントリフィールドの物理名(COLUMN名として使用)、リレーションの物理名(参照整合性のCONSTRAINT名として使用)はすべて必須としています。
これらの物理名が設定されていない場合の生成結果については予測できません。
※論理エンティティや論理リレーションあるいは論理エントリの場合は、物理名が未登録でも関係ありません。
○PRIMARY KEY INDEXは必須
PRIMARY KEY INDEXは、PRIMARY KEY CONSTRAINT名として使用しています。
PRIMARY KEY INDEXが未定義の場合、その生成結果については予測できません。
○必要なINDEXは必ず登録
XupperII本体のDDL生成機能では、FOREIGN KEYに対するINDEXが未定義でも、FOREIGN KEY INDEXを自動生成するオプションがありますが、当サンプルにはそのようなオプションはありません。
従って、差分検出するための前バージョンのDB定義情報に、XupperII本体より自動生成されたINDEXが存在すると、DROP INDEXを生成します。
○名称変更は削除と追加
差分検出する対象のDB定義情報に対して、物理名称を変更した場合は、DROP TABLEやCOLUMNのDROPと、CREATE TABLEやCOLUMNのADDを行ないます。
○属性の変更と追加
CULUMNのデータタイプや桁数の変更、あるいはNULL制約の変更およびDEFAULTの変更などがあった場合、ALTER TABLE MODIFYを無条件に生成します。
同様に、既存のTABLEにNOT NULL制約のCOLUMNが追加されていた場合も、ALTER TABLE ADDで、NOT NULLのまま生成します。
○PRIMARY KEYの追加と削除
TABLEのPRIMARY KEYの構成要素に変動(追加および削除)があった場合、PRIMARY KEY CONSTRAINTのDROP、TABLEに対するCOLUMNのADDまたはDROPの後に、PRIMARY KEY CONSTRAINTの再作成を行ないます。
またこのTABLEを参照するFOREIGN KEY CONSTRAINTも一旦DROPしてから再作成を行ないます。