Home > リファレンスガイド > ユーティリティ > データマッパーユーティリティ > 送り元と送り先のプロパティペイン > [Database]プロパティ > データベースウィザード > [UPSERT 条件]ダイアログ
UPSERT処理で使用するためにデータベースに送信される UPSERT/MERGEの条件を入力するには、[UPSERT 条件]ダイアログを使用します。UPSERT/MERGEステートメントを使用すると、データベースにレコードが存在する場合はレコードを更新でき、そうでない場合はレコードを挿入することができます。
UPSERT処理でサポートされるデータベースのリストについては、データベースリソースのセクションを参照してください。データベースがUPSERT操作をサポートしていない場合、データマッパーツリーに適切なエラーが表示されます。
[UPSERT条件]ダイアログには、以下のフィールドが含まれています。
名前 |
説明 |
使用可能列 |
選択したテーブル内の全てのカラムのリスト。それを[UPSERT条件]テキストフィールドに追加するには、カラムをダブルクリックしてください。 |
変数 |
使用できる変数のリスト。それを[UPSERT条件]テキストフィールドに追加するために、変数をダブルクリックしてください。 |
UPSERTの条件 |
[使用可能列]および[変数]フィールド(上記)で選択した項目に従ってUPSERT条件を表示します。このテキストは10000文字を超えてはいけません。 ウィザードは、[リソース]で選択したデータベースの種類に従って、[概要]画面に実際のUPSERT/MERGEステートメントを生成します。 |
UPSERT文は下記のファイルで提供されます 'Studio\Templates\Database\SQLTemplates.xml'. |
[UPSERT条件]ダイアログを使用するには:
必要な[使用可能列]、[変数]をダブルクリックして、UPSERTステートメントを作成します。ここで選択した項目は、選択した順番で[UPSERT条件]テキストフィールドに入力されます。
情報を入力したら[次へ]をクリックします。これで[概要]画面が表示されます。
ステートメントの結合画面は適用されません。 UPSERTオペレーション途中の場合はスキップされます。
UPSERT条件を使用する場合、以下に注意事項があります。
|
各データベースのUPSERTの挙動
データベースにはさまざまな機能があり、UPSERTオペレーションの実装も異なります。
一部のデータベースでは、リレーションを使用してMergeステートメントを使用し、既存の行が使用されているかどうかを識別できます。一方、他のデータベースでは、挿入中に複製イベントを処理し、代わりに更新操作に移動します。
データベースの各特性によって、Magic xpiはデータベースごとにUPSERT操作を異なる方法で処理します。 したがって、ウィザードは以下のように、データベースごとに異なる動作をします。:
PostgreSQL
PostgreSQLデータベースには次の制限があります:
Boolean条件、動的な値と列はサポートされていません。
UPSERT条件では物理カラムのみが許可されます。
例)
public.order.orderid
public.order.orderid,public.order.ordername
MySQL
UPSERT条件画面は、MySQLデータベースでは使用できません。MySQLデータベースは、テーブルで定義された一意/主キーに基づいて、レコードの複製を内部的に処理します。
DB2及びDB2/400
他のデータベースと同様に、DB2及びDB2 / 400データベースの場合、UPSERTおよびMERGEコマンドはさまざまな組み合わせを使用して構築します。ウィザードでは、ユーザーは基本的なUPSERT操作のみを構成できます。
一括操作などの他の操作は、動的SQLプロパティの値を[はい]に設定するか、ウィザードの概要画面でステートメントを変更することによって構成できます。
以下に示すように、これらのデータベースのUPSERT条件は2つの異なる方法で定義でき、どちらもMagic xpiでサポートされています。
|
(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 |