RDBPut - RDBへの出力

RDBMSのテーブルに対して更新を行います。

■ストリーム情報

入力フォーマットRecord
接続数1
説明 入力ストリームのフィールド定義を専用の設定画面で行います。
このフィールド定義は直前に連結したマッパーの出力ストリームのフィールド定義にコピーされ、そこに対して値のマッピングを行います。そのため、このコンポーネントに連結できるコンポーネントはマッパーのみとなっています。
出力フォーマットRecord
説明 入力ストリームをそのまま出力します。

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

名前プロパティ型マッピング説明
コネクション名connection- 接続先のRDBを指定します。 コネクションペインまたは管理コンソールにて作成されたRDB接続名を選択します。
実行する処理choice- 実行する更新操作を指定します。
各モードごとの動作については、下記トピック「実行する処理ごとの動作」を参照してください。
テーブル名string入力&出力 更新対象のテーブル名を指定します。
値フィールドをクリックすると、テーブル名とフィールドの設定画面が表示されます。ここでフィールド定義を行うことによってテーブル名が自動で設定されます。設定画面については、下記トピック「テーブル名とフィールドの設定」を参照してください。
処理件数int   出力 実際に更新されたレコード件数が取得できます。

バッチ処理件数 が2以上の場合はバッチ処理になるため、使用するドライバーまたは対象の データベースに依存して正しい件数がとれない場合があります。
件数が不明の場合は-1の値を設定します。
挿入件数int   出力実行する処理 が「Insert/Update」「Update/Insert」の場合に、挿入されたレコード件数が取得できます。
更新件数int   出力実行する処理 が「Insert/Update」「Update/Insert」の場合に、更新されたレコード件数が取得できます。
バッチ処理件数int- バッチ処理で一度に送信するレコード件数を設定します。
タイムアウト(秒)int入力&出力 RDBMSへ更新文を発行してから結果が返ってくるまでの待ち時間を秒単位で指定します。
指定時間を経過しても実行が終わらない場合は汎用 となります。
0の場合はタイムアウトすることはありません。
入力category- 入力ストリームのフィールド定義を行います。実行する処理 が「Insert」以外の場合、テーブルのキーとなるカラムの「キーにする」項目で「はい」を指定します。
※「Insert」で、DBMSがOracleで、かつBLOBまたはCLOB列を使用する場合はキーを設定する必要があります。

■トランザクション処理

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

■エラー処理

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

■フローの強制終了

フローを強制終了すると、通常は実行中のコンポーネントの処理が終了してから次のコンポーネントに制御が遷移する時点でフローがアボートしますが、本コンポーネントでは実行中の処理を強制的に終了してフローがアボートします。強制終了された場合、トランザクションをロールバックします。

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

Insert

フィールド定義にあるすべてのフィールドをテーブルにレコードとして挿入します。
通常キー定義は使用しませんが、DBMSがOracleで、かつBLOBまたはCLOB列がフィールドに含まれる場合はキー定義が必要です。

Update

「キーにする」項目で「はい」を指定したフィールドにマッチするレコードを、キー以外のフィールドを用いて更新します。
キーにするフィールドを更新することはできません。

Insert/Update

フィールド定義を用いてInsertを実行し、キー違反エラーが発生した場合はUpdateを実行します。キー違反エラーとはPRIMARY Key制約やUNIQUE Key制約に違反した場合に発生するエラーです。キーにするフィールドにこれらの制約が設定されていない場合には、このモードは正常に動作しません。
※PostgreSQLではこのモードは使用できません。

Update/Insert

フィールド定義を用いてUpdateを実行し、更新件数が0件の場合はInsertを実行します。

Delete

「キーにする」項目で「はい」を指定したフィールドにマッチするレコードを削除します。
キーにするフィールド以外は使用しません。

Insert/UpdateとUpdate/Insertの違いについて

この2つの機能の違いはInsertとUpdateの発行順序の違いです。結果について基本的な違いはありませんが、次の点に注意して利用してください。

パフォーマンス

「Insert/Update」は、Insertが失敗したらUpdateを発行するので、Insertが成功すればUpdateは発行されません。 逆に「Update/Insert」では、Updateが失敗したらInsertを発行するので、Updateが成功すればInsertは発行されません。 つまり、Insertが成功する確率が高いケースでは「Insert/Update」を使い、 逆にUpdateが成功する確率が高いケースでは「Update/Insert」を使うのが効率的です。

シーケンスやオートナンバー

DB側で自動的にユニークな値を設定するような型を使用している場合に「Insert/Update」を使用すると、 キー違反がおこらなくなり常にレコードがInsertされるようになります。 このような場合は「Update/Insert」を使用するようにしてください。

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

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

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

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

●定義画面を表示する

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

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

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

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

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

フィールドを選択して「OK」をクリックすると、インスペクタの入力タブにフィールド一覧が表示されます。
キーを指定するには、キーとなるフィールドの「キーにする」項目を「はい」にします。
表示名に値を設定することでテーブル上の実際のカラム名とストリーム定義で使用するフィールド名を別にすることができます。