Home > リファレンスガイド > ユーティリティ > データマッパーユーティリティ > 送り元と送り先のプロパティペイン > [Database]プロパティ > データベースウィザード > [UPSERT 条件]ダイアログ

[UPSERT 条件]ダイアログ

UPSERT処理で使用するためにデータベースに送信される UPSERT/MERGEの条件を入力するには、[UPSERT 条件]ダイアログを使用します。UPSERT/MERGEステートメントを使用すると、データベースにレコードが存在する場合はレコードを更新でき、そうでない場合はレコードを挿入することができます。

UPSERT処理でサポートされるデータベースのリストについては、データベースリソースのセクションを参照してください。データベースがUPSERT操作をサポートしていない場合、データマッパーツリーに適切なエラーが表示されます。

[UPSERT条件]ダイアログには、以下のフィールドが含まれています。

名前

説明

使用可能列

選択したテーブル内の全てのカラムのリスト。それを[UPSERT条件]テキストフィールドに追加するには、カラムをダブルクリックしてください。

変数

使用できる変数のリスト。それを[UPSERT条件]テキストフィールドに追加するために、変数をダブルクリックしてください。

UPSERTの条件

 [使用可能列]および[変数]フィールド(上記)で選択した項目に従ってUPSERT条件を表示します。このテキストは10000文字を超えてはいけません。

ウィザードは、[リソース]で選択したデータベースの種類に従って、[概要]画面に実際のUPSERT/MERGEステートメントを生成します。

UPSERT文は下記のファイルで提供されます 'Studio\Templates\Database\SQLTemplates.xml'.

[UPSERT条件]ダイアログを使用するには:

  1. 必要な[使用可能列]、[変数]をダブルクリックして、UPSERTステートメントを作成します。ここで選択した項目は、選択した順番で[UPSERT条件]テキストフィールドに入力されます。

  2. 情報を入力したら[次へ]をクリックします。これで[概要]画面が表示されます。

  3. ステートメントの結合画面は適用されません。 UPSERTオペレーション途中の場合はスキップされます。

UPSERT条件を使用する場合、以下に注意事項があります。

  • UPSERT処理では、、選択した文字変数の両側にシングルクオーテーションを追加する必要があります。

  • マッピングで指定できる変数で動的変数を指定するには、 database_field=<!?variablename?!>と記述します。例: OrderID=<!?MyOrderNumber?!>。この場合、データマッパーの送り先にUPSERT複合要素の一部としてMyOrderNumber変数が表示されます。

  • ODBCまたはデータベースドライバがMERGE/UPSERTステートメントをサポートしていない場合は、[概要]ステップでMERGEステートメントを提供しません。代わりにUpdateステートメントを表示します。

  • リソースがOracleまたはMicrosoft-SQLサーバ以外のDBMSタイプを持つシナリオで、UPSERTプロパティをYesに設定すると、適切なエラーがデータマッパーツリーに表示されます。この時点では、ウィザードはUPSERTステートメントを生成しません。

  • UPSERT条件で使用されているカラムを更新することは推奨できません。SQLステートメントからこれらのカラムを手動で削除することができます。

  • MSSQLでは、ユーザはデータベーススキーマのUPDATE部分のUPSERT条件に含まれるフィールドを更新できますが、Oracleデータベースではサポートされておらず、実行時にエラーが発生します。

各データベースのUPSERTの挙動

データベースにはさまざまな機能があり、UPSERTオペレーションの実装も異なります。

一部のデータベースでは、リレーションを使用してMergeステートメントを使用し、既存の行が使用されているかどうかを識別できます。一方、他のデータベースでは、挿入中に複製イベントを処理し、代わりに更新操作に移動します。

データベースの各特性によって、Magic xpiはデータベースごとにUPSERT操作を異なる方法で処理します。 したがって、ウィザードは以下のように、データベースごとに異なる動作をします。:

PostgreSQL

PostgreSQLデータベースには次の制限があります:

例)

MySQL

UPSERT条件画面は、MySQLデータベースでは使用できません。MySQLデータベースは、テーブルで定義された一意/主キーに基づいて、レコードの複製を内部的に処理します。

DB2及びDB2/400

他のデータベースと同様に、DB2及びDB2 / 400データベースの場合、UPSERTおよびMERGEコマンドはさまざまな組み合わせを使用して構築します。ウィザードでは、ユーザーは基本的なUPSERT操作のみを構成できます。

一括操作などの他の操作は、動的SQLプロパティの値を[はい]に設定するか、ウィザードの概要画面でステートメントを変更することによって構成できます。

以下に示すように、これらのデータベースのUPSERT条件は2つの異なる方法で定義でき、どちらもMagic xpiでサポートされています。

  • 論理名は、UPSERTクエリの「USING」セクションで使用できます。

  • USINGとON条件で生成されたUPSERTステートメントは、ソーステーブルとターゲットテーブルが同じである場合、1レコードとして評価される必要があります。 複数レコードを返す場合、「重複するキー値が指定されました」というエラーが発生します。

(src.CLIENT_NAME,src.CLEINT_VAT) = (xxxx,'demo')

または

src.CLIENT_NAME='xxxx' and src.CLEINT_VAT='demo'

 

これらの両方の組み合わせのMergeステートメントは次のようになります。:

 

MERGE INTO SQLMERGE.MERGE_CLIENT AS tgt USING (SELECT CLIENT_ID,CLIENT_NAME,CLEINT_VAT,CLIENT_BILL_ADDRESS,CLIENT_SHIP_ADDRESS FROM SQLMERGE.MERGE_CLIENT)

AS srcON ((src.CLIENT_NAME,src.CLEINT_VAT) = ('xxxx','demo'))

WHEN MATCHED THEN UPDATE SET CLIENT_BILL_ADDRESS=1991,CLIENT_SHIP_ADDRESS=(src.CLIENT_SHIP_ADDRESS+10)

WHEN NOT MATCHED THEN INSERT (CLIENT_ID,CLIENT_NAME,CLEINT_VAT,CLIENT_BILL_ADDRESS,CLIENT_SHIP_ADDRESS) VALUES ((src.CLIENT_ID+30),'xxxx','demo',66,777)

または

MERGE INTO SQLMERGE.MERGE_CLIENT AS tgt USING (SELECT CLIENT_ID,CLIENT_NAME,CLEINT_VAT,CLIENT_BILL_ADDRESS,CLIENT_SHIP_ADDRESS FROM SQLMERGE.MERGE_CLIENT)

AS srcON ((src.CLIENT_NAME= 'xxxx' AND src.CLEINT_VAT='demo'))

WHEN MATCHED THEN UPDATE SET CLIENT_BILL_ADDRESS=1991,CLIENT_SHIP_ADDRESS=(src.CLIENT_SHIP_ADDRESS+10)

WHEN NOT MATCHED THEN INSERT (CLIENT_ID,CLIENT_NAME,CLEINT_VAT,CLIENT_BILL_ADDRESS,CLIENT_SHIP_ADDRESS) VALUES ((src.CLIENT_ID+30),'xxxx','demo',66,777)

 

Since version:

4.9