RDBDiff - 差分情報の取得、及びRDBMSのテーブルに対しての更新

入力されたレコードセットとRDBのテーブルに存在する全レコードを比較して、差分のあったレコードに差分情報のフィールドを追加してストリームに出力します。
また、差分のあったレコードを入力されたレコードセットの内容でRDBのテーブルに対して更新を行うこともできます。

■ストリーム情報

入力フォーマットRecord
接続数1
説明 入力ストリームのフィールド定義を専用の設定画面で行います。
このフィールド定義は直前に連結したマッパーの出力ストリームのフィールド定義にコピーされ、そこに対して値のマッピングを行います。そのため、このコンポーネントに連結できるコンポーネントはマッパーのみとなっています。
出力フォーマットRecord
説明 出力ストリームのフィールド定義は、入力のフィールド定義の最後に「差分種別」フィールドが追加されたレコードを出力します。詳細は下記トピック「差分種別フィールドについて」を参照してください。

■コンポーネントプロパティ

名前プロパティ型マッピング説明
コネクション名connection- 接続先のRDBを指定します。 コネクションペインまたは管理コンソールにて作成されたRDB接続名を選択します。
テーブル名string- 更新対象のテーブル名を指定します。 コンポーネントをダブルクリックすると、テーブル名とフィールドの設定画面が表示されます。ここでフィールド定義を行うことによってテーブル名が自動で設定されます。設定については、下記トピック「テーブル名とフィールドの設定」を参照してください。
処理件数int   出力 実際に更新されたレコード件数が取得できます。
実行する処理choice- 実行する操作を指定します。
各モードごとの動作については、下記トピック「実行する処理ごとの動作」を参照してください。
条件式string- 指定されたテーブルのレコード範囲を絞る条件式を指定します。
条件式の指定方法はSQLのWHERE句の指定方法そのままです。(ただしここでの指定には「WHERE」句は必要ありません。)
条件式の中にはSQLパラメーターを埋め込むことができます。
入力以外の差分を含めるboolean- 入力ストリームのレコードとキー項目が一致しなかったRDBのレコードの差分情報を出力するかどうか選択します。
はい [true] - 一致しないレコードも出力します。
いいえ [false] - 一致しないレコードは出力しません。
RDBから削除するboolean- 入力ストリームのレコードとキー項目が一致しなかったRDBのレコードをテーブルから削除するか選択します。削除するには、入力以外の差分を含める を「はい」、実行する処理 を「更新する」処理に指定します。両方のプロパティが正しく指定されていない場合、本プロパティで「はい」を指定しても削除されません。
はい [true] - 一致しないレコードをRDBから削除します。
いいえ [false] - 一致しないレコードをRDBから削除しません。
Nullと空文字を同一視するboolean- 比較時にNullと空文字を等しいと判定するかどうかを指定します。
はい [true] - Nullと空文字は等しいと判定されます
いいえ [false] - Nullと空文字は等しくないと判定されます
入力category- 入力ストリームのフィールド定義を行います。設定については、下記トピック「テーブル名とフィールドの設定」を参照してください。項目「処理種別」の詳細は、下記トピック「処理種別フィールドについて」を参照してください。
SQLパラメーターcategory入力&出力 パラメーター名、入出力種別、データ型、値のセットで定義します。
値は、前に連結したマッパーからマッピングすることが可能です。また、入出力種別で出力するパラメーターは直後に連結したマッパーから参照することもできます。詳細については、下記トピック「SQLパラメーターの使い方」を参照してください。

■トランザクション処理

コミットRDBMSをコミットします。
ロールバックRDBMSをロールバックします。

■エラー処理

タイプパラメーターエラー処理フロー
へのストリーム
エラー
コード
説明
汎用 なし コンポーネントの入力ストリーム なし コネクション名 に指定したコネクションが見つからない場合
データベースベンダー固有の例外コードテーブルまたはフィールドが見つからない場合
データベースベンダー固有の例外コードSQLの実行に失敗した場合
なし キーが指定されていない場合
接続エラー なし コンポーネントの入力ストリーム なし DBMSとの接続に失敗した場合

■実行する処理ごとの動作

本コンポーネントで行う処理を決定します。 入力レコードでRDBを更新するかどうかと出力データを選択します。 出力データとは、出力ストリームの差分種別フィールドが'Update'で出力されるレコードの内容を、入力ストリームのレコードのデータにするかRDBのレコードのデータにするかを選択します。

更新しない:入力

入力ストリームのレコードデータを出力します。 RDBの更新は行いません。

更新しない:RDB

RDBのレコードデータを出力します。 RDBの更新は行いません。

更新する:入力

入力ストリームのレコードデータを出力します。 またRDBの更新も行います。

更新する:RDB

RDBのレコードデータを出力します。 またRDBの更新も行います。

■差分種別フィールドについて

入力のフィールド定義の最後に追加される差分種別フィールドには以下の文字列が返されます。
戻り値説明
Update同一のキーを持つ入力ストリームのレコードとRDBのレコードに差分があった場合
Insertあるキーを持つレコードが、入力ストリームには存在したがRDBには存在しなかった場合
Deleteあるキーを持つレコードが、RDBには存在したが入力ストリームには存在しなかった場合

本コンポーネントで取得できる差分情報の例を以下に示します。

比較するレコードセット

入力レコード:
aaa,あああ
bbb,いいい
ccc,ううう
RDBのレコード:
aaa,あああ
bbb,イイイ
ddd,えええ

出力ストリームのレコードセット

差分情報として一番最後に差分種別フィールドが追加されて出力されます。

入力以外の差分を含める 」プロパティが「はい」の場合

実行する処理 プロパティでの出力データが「入力」の場合

bbb,いいい,Update
ccc,ううう,Insert
ddd,えええ,Delete

実行する処理 プロパティでの出力データが「RDB」の場合

bbb,イイイ,Update
ccc,ううう,Insert
ddd,えええ,Delete

入力以外の差分を含める プロパティが「いいえ」の場合

実行する処理 プロパティでの出力データが「入力」の場合

bbb,いいい,Update
ccc,ううう,Insert

実行する処理 プロパティでの出力データが「RDB」の場合

bbb,イイイ,Update
ccc,ううう,Insert

■処理種別フィールドについて

設定値に関する詳細は以下のとおりです。
説明
キーにする入力レコードとRDBにあるレコードを一致させるキーとして扱います。
比較する入力レコードとRDBにあるレコードの差分を取る際の比較対象として扱われます。
比較しないキーにも比較の処理にも使用されません。RDBのレコードを更新する場合に、入力レコードの値でRDBを更新します。

注意

データ型がDatetimeのフィールドに"比較する"を選択した場合、うまく比較できない場合があります。

■フィールドに設定する制約

キーにするフィールドにはPRIMARY Key制約やUNIQUE Key制約を設定しておく必要があります。 キーにするフィールドにこれらの制約を設定しなくても動作しますが、 キーにするフィールド以外のフィールドにこれらの制約が設定されていると、設定する値によってはUpdateやInsert時に制約違反が発生する可能性があります。

■テーブルとフィールドの設定

RDBMSのテーブルに対して処理するテーブルとフィールドの選択は、専用のダイアログボックスから行います。
ダイアログボックスから選択すると、インスペクタの入力タブに処理対象フィールドとして表示されます。
処理種別を指定するには、専用のダイアログボックスでフィールドを選択してから、インスペクタの入力タブでキーとなるフィールドの「処理種別」項目を設定します。
表示名に値を設定することでテーブル上の実際のカラム名とストリーム定義で使用するフィールド名を別にすることができます。

●定義画面を表示する

定義画面を表示するには、以下のいずれかの操作を行います。

●読み込むテーブルを指定する

定義画面を表示すると(1)にテーブルの一覧が表示されます。テーブルを指定すると、(3)(5)に情報が表示されます。

●処理対象フィールドを指定する

テーブルを指定すると、(5)にテーブルのフィールド一覧が表示されます。初期状態では、すべてのフィールドが処理対象になるように(4)のチェックボックスがオンになっています。

フィールドを選択して「OK」をクリックすると、インスペクタの入力タブにフィールド一覧が表示されます。

■SQLパラメーターの使い方

SQLパラメーターを使うと、実行時の条件を動的に変更することができます。条件式 に記述する際に、SQLパラメーターで定義した任意の名前のパラメーター名を含む条件式を記述します。本コンポーネントの前にマッパーを配置し、定義したパラメーターにマッピングすることにより、実行時の動的な文字列を含む条件で比較を行うことができます。

パラメーターには、以下の2つの書式があります。

SQLパラメーター書式

SQLパラメーター書式は、条件式中のフィールド値となる箇所で使います。パラメーターの定義では、フィールドに対応したデータ型を指定します。条件式で、置き換えたい文字列を使用する部分に「?パラメーター?」のようにパラメーター名を?で囲んで記述します。

置換文字列書式

置換文字列書式は、条件式中の任意の箇所で使います。パラメーターの定義では、データ型にStringを指定します。条件式で、置き換えたい文字列を使用する部分に「$パラメーター名$」のようにパラメーター名を$で囲んで記述します。

●SQLパラメーターを使ってSQL を記述する

以下の手順で記述します。

  1. 本コンポーネントをクリックするとインスペクタに表示されるSQLパラメータータブで、任意の名前、データ型、初期値を入力します。
  2. 条件式 に、置き換えたい文字列を使用する部分によって「?パラメーター名?」または「$パラメーター名$」のようにフィールド名を?または$で囲んで記述します。
  3. 本コンポーネントの前にマッパーを配置します。
  4. マッピングウィンドウの出力側にあるSQLパラメーターのフィールド名に置換文字列となるフィールドをマッピングします。

条件式 プロパティに「ID <= ?p1? AND ID >= ?p2?」という条件式が指定され、
SQLパラメーター プロパティに「p1=1000」、「p2=2000」が指定されている場合、
IDが1000以上、2000以下のレコードが本コンポーネントでの比較対象になります。