順序は、使用時に自動的に増加する値です。
Oracle Data Integratorの順序は、主に一部のRDBMSでネイティブの順序が存在しないことを補う目的で提供されています。値は、リポジトリに格納するか、外部RDBMS表のセル内で管理することができます。
順序は、グローバル順序として作成するか、またはプロジェクト内で作成することが可能です。グローバル順序はすべてのプロジェクトに共通ですが、プロジェクト順序はそれを定義したプロジェクト内でのみ使用できます。
Oracle Data Integratorでは、次の2つのタイプの順序がサポートされます。
標準順序: 現在の値がリポジトリに格納されます。
特定順序: 現在の値がRDBMS表のセルに格納されます。Oracle Data Integratorは、値を読み取り、(同時更新の場合)行をロックして最後の増分以降に処理された行を更新します。
注意: Oracle Data Integratorは、順序が複数ユーザー管理で使用される場合には順序をロックしますが、順序の再開位置については処理しません。つまり、SQL文のROLLBACKでは、トランザクションが開始した時点の値に順序を戻すことができません。
注意: Oracle Data Integratorの順序は、一部のRDBMSで順序が存在しないことを補う目的で開発されています。RDBMSの順序が存在する場合は、その順序を使用してください。これにより、エージェントとデータベース間の対話が減少するため、処理速度が向上する可能性があります。
標準順序を作成する手順:
プロジェクトの「順序」ノードをクリックするか、「グローバル順序」ノードをクリックします。
右クリックし、「順序の挿入」を選択します。
順序の「名前」を選択し、「標準順序」を選択します。
最初の「位置」と「増分」を入力します。
「OK」をクリックします。
ツリー・ビューに順序が表示されます。
特定順序を作成する手順:
プロジェクトの「順序」ノードをクリックするか、「グローバル順序」ノードをクリックします。
右クリックし、「順序の挿入」を選択します。
順序の「名前」を選択し、「特定の順序」を選択します。
「増分」の値を入力します。
順序の値を格納する「スキーマ」、「表」および「列」の名前を入力します。
Oracle Data Integratorで表の特定の行を検索できるように、「フィルタ」を入力します。をクリックすることで式エディタを使用できます。
をクリックして式を検証します。
「OK」をクリックします。
ツリー・ビューに順序が表示されます。
注意: Oracle Data Integratorで特定順序の値にアクセスする場合、スキーマで実行される問合せは、SELECT 列 FROM 表 WHERE フィルタの形式となります。
順序を削除する手順:
ツリー・ビューで順序をクリックします。
右クリックし、「削除」を選択します。
「OK」をクリックします。
ツリー・ビューから順序が削除されます。
変数とは異なり、順序のスコープはコード内で明示的に宣言する必要はありません。
順序は、次のようなOracle Data Integratorのすべての式で使用できます。
マッピング
フィルタ
結合
制約
...
順序は、次の構文によりすべての文で使用できます。
#<SEQUENCE_NAME>_NEXTVAL: 順序値が増分され、式のテキスト内で直接置換されます。
SQL文の場合にかぎり、順序は次の構文によりバインディング・モードで使用できます。
:<SEQUENCE_NAME>_NEXTVAL: 順序値が増分され、問合せのパラメータとしてRDBMSに渡されます。
注意: 順序はエージェントにより解決されるため、順序が増分されるのは、エージェントそれ自体が1つのレコードを処理した場合のみです。
例:
- SQL文の insert into fac select :NO_FAC_NEXTVAL, date_fac, mnt_facでは、SQL文により10,000行が処理されたとしても、順序値が増分されるのは1回のみです。この場合、エージェントは1つ1つのレコードを処理せずに、データベース・エンジンにコマンドを送信するだけのためです。
- すべての行を増分するには、データをエージェント経由で送信する必要があります。これを行うには、Oracle Data Integratorに固有のSELECT/INSERT構文を次のように使用します。
SELECT date_fac, mnt_fac /* on the source connection */
INSERT into FAC (ORDER_NO, ORDER_DAT, ORDER_AMNT) values (:NO_FAC_NEXTVAL, :date_fac, :mnt_fac) /* on the target connection */
表に挿入された各行で順序が確実に更新されるには、各行がエージェントに処理される必要があります。この動作を保証するには、次の手順を実行します。
ターゲットで実行される順序を格納するマッピングを作成します。
挿入に対してのみアクティブになるようマッピングを設定します。更新では順序はサポートされません。
増分更新IKMを使用する場合、順序の移入される列が使用中の更新キーに含まれていないことを確認します。たとえば、データストアの主キーをロードするために順序を使用する場合、インタフェースの更新キーとして代替キーを使用する必要があります。
Oracle Data Integratorの順序をバインド構文(:<SEQUENCE_NAME>_NEXTVAL)で使用する場合、IKMによりすべてのデータをエージェント経由で送信するようデータ・フローを構成する必要があります。これは、生成された統合ステップをオペレータでチェックすることで検証できます。異なる接続で、単一のSELECT...INSERT文ではなく個別のINSERTコマンドとSELECTコマンドが実行される必要があります。
注意: 次の制限に注意してください。
- 順序とともにマップされた列では、NOT NULLをチェックできません。
- 同様に、順序を参照している主キーまたは代替キーでは、静的制御およびフロー制御を実行できません。
Oracle Data Integratorの順序は、ネイティブの順序をエミュレートする解決策として存在しています。一部のデータベースでは、増分する一意の値が自動的に移入されるID列をネイティブに提供しています。
ID列を移入する場合、次の手順を実行する必要があります。
ID列をロードするマッピングは、空白および非アクティブにする必要があります。挿入または更新に対してアクティブにしないでください。
増分更新IKMを使用する場合、ID列が使用中の更新キーに含まれていないことを確認します。ID列が主キーの一部である場合、インタフェースの更新キーとして代替キーを定義する必要があります。
注意: 次の制限に注意してください。
- ID列ではNOT NULLをチェックできません。
- ID列を含む主キーまたは代替キーでは、静的制御およびフロー制御を実行できません。