このサイトをビューするために JavaScript を有効化してください。

Altova MapForce 2020 Enterprise Edition

既存のレコードを更新するだけでなく、同じデータベーステーブルに新規のレコードを挿入する必要がある場合があります。このような場合には、 MapForce では、「以下の条件で更新し、残りを挿入」 アクション使用することができ、これは以下のように動作します:

 

「以下の条件で更新する」 条件が true の場合、既存のデータベースの記録は、マッピングからのデータにより更新されます。

「以下の条件で更新する」 条件が false の場合、 また、 「残りを挿入」 条件が存在する場合、 新規のレコードが挿入されます。

ソースファイル内に対応するエントリが存在しないデータベース内にレコードが存在する場合、これらのレコードは変更されません。

 

MySQL ODBC メモ

ターゲットデータベースが ODBC を使用する MySQL の場合、MySQL ODBC コネクタの「カーソル/結果」 タブ内でオプション 「影響を受けた行の代わりに一致する行w返す」 が有効化されている必要があります。または、 データベース接続ウィザードを使用して、接続文字列を手動で入力する場合、 接続文字列に Option=2  と列: Dsn=mydsn;Option=2;を追加します。

 

MySQL ODBC コネクタからこのオプションを有効化する方法:

 

1.Windows キーを押して、"ODBC"を入力します。

2.(インストールされた MySQL ODBC コネクタにより 32-ビット、または 64-ビットの) ODBC データソース管理者を実行します

3.MapForce マッピングにより使用される データソース名 (DSN) をクリックし、「構成」をクリックします。

mf_mysql_odbc_dsn

4.使用することのできる高度なオプションを使用するために Details >>」 をクリックします。

5.Cursors/Results タブをクリックし、チェックボックス 「Return matched rows instead of affected rows」を選択します。

 

サンプル

次の例は、XML ソースからのデータをデータベース テーブルに(更新と挿入して)マージする方法を説明しています。この例は以下のファイルを使用します:

 

altova-cmpy-extra.xml — データベースに挿入されるソースデータを含んでいます。

Altova_Hierarchical.xsd — 上記のインスタンスファイルを検証するために使用されるスキーマです。

altova.mdb — 更新されるターゲットデータベースです。

 

全てのファイルはフォルダー <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\ 内にあります。 下の説明では、簡素化のために、これらのファイルへの完全なパスは省略されています。

 

この例のマッピングは、サンプルデータベースファイルを変更します。元のデータベースをバックアップし、下記のステップを開始する前に、新規のコピーを起動することが奨励されます。することが奨励されます。バックアップを作成することにより、元の例が上書きされず、下記と同じ結果を得ることができます。詳細に関しては、次を参照してください:データベースを変更するマッピングの実行

 

マッピングの目的は、ターゲット「Person」 テーブルにソース XML ドキュメントからのすべてのレコードをマージすることです。具体的には、ソース XML データ内の各レコードのために、 マッピングは以下を行う必要があります:

 

XML ファイル内の 個人 の PrimaryKey  が、データベース内の 個人 の PrimaryKey に対応する場合、レコードは更新されます。

上記の条件を満たさない Person テーブル内の既存のレコードは影響を受けません。

XML ファイル内の 個人 の PrimaryKey が、ターゲットデータベース テーブルに一致するものが無い場合、 新規のレコードをデータベーステーブルに追加してください。

 

マッピングの目的を達成するために、以下のステップを行います。

 

ステップ 1: ソース XML コンポーネントを挿入する

「挿入」 メニューから、「XML スキーマ/ファイル」をクリックして、Altova_Hierarchical.xsd を参照します。インスタンスファイルを与えるように問われると、altova-cmpy-extra.xml を参照してください。

 

ステップ 2: ターゲットデータベースを挿入する

「挿入」 メニューから、「データベース」をクリックして、 altova.mdb に接続するためにウィザードのステップを行ってください。 (次を参照してください: 例: "altova.mdb" データベースをマッピングに追加する)。

 

ステップ 3: 接続を描く

下に表示されるとおりマッピングの接続を描きます。

mf_db_merge_01

 

ステップ 4: 「以下の条件で更新し、残りを挿入」 アクションを構成する

1.ターゲットコンポーネントで、 「Person」 テーブルの横の アクション: 挿入 ( tbl-act-icon ) ボタンをクリックします。

2.「レコードに対するアクション」の横の、「以下の条件で更新する...」を選択します。これはデータベーステーブルアクションを条件付きの更新アクションに変更します。つまり、 条件が満たされる場合のみ、現在のレコードは更新されます (次のステップを参照してください)。

3.「PrimaryKey」値 の横にあるオプションを、以下に表示されるように「equal」選択します。つまり、 データベースの記録は、 「PrimaryKey」 値が、マッピングから与えられるの 「PrimaryKey」 値に等しい場合のみ更新されます。

mf_db_merge_02

4.任意で、NULL equal チェックボックスを選択します。 このサンプルでは、ソース XML内の PrimaryKey フィールド、またはデータベース内の PrimaryKey フィールドに null 値が含まれていないため、このチェックボックスには関連性はありません。 しかしながら、データに null 値が含まれており、このような値を等価として扱うには、場合、このチェックボックスをチェックする必要があます。それ以外の場合は、希望しない結果が生成される場合があります。 詳細に関しては、データベーステーブルアクション内の Null 値の処理を参照してください。

5.「アクションの追加」 をクリックします。これは、新規のアクションを既存の「以下の条件で更新する」 アクションの右に追加します。 新規のアクションを「残りを挿入」として構成します:

mf_db_merge_03

上のイメージでは、データベース テーブル アクションは、マッピングの目的に従い構成されています。つまり、 「以下の条件で更新する」... 条件が満たされる場合のみレコードは更新されます。それ以外の場合、 挿入されます。オプション 「マップされた値」 は、マッピングからの値がレコードの全てのフィールドを作成するために使用されることを指定します。

 

(この例では必要ありませんが)2つ以上のアクションを同じデータベーステーブルに対して定義することもできます。マッピングランタイムでは、アクションは左から右へ実行されます。最後の 「挿入」 アクションは最後と考えられ、このアクションの後のアクションは無視されます。

 

ダイアログボックスの「アクションの追加」 ボタンは、 選択されたアクションの後に新規にアクションを追加します。 「アクションの挿入」 は、新規のアクションを選択されたアクションの前に追加します。既存の アクションを削除するには、アクションをクリックし、を「アクションの削除」クリックします。

 

6.ダイアログボックスを閉じるために「OK」をクリックします。マッピングでは、 アクション: 挿入 tbl-act-icon ボタンが、アクション: 更新; 挿入 ( mf_db_ic_action_update_insert ) これは、更新と挿入アクションが、このテーブルのために構成されることを示します。

 

ステップ 5: マッピングをプレビューし、データベースを更新する

 

マッピングをプレビューするために「出力」タブをクリックします。データベースに対して実行されるアクションを含む、 SQL スクリプトが生成されます。スクリプトは、まだ、データベースを変更していません。 これはまだプレビューです。

mf_db_merge_04

データベース更新前の SQL スクリプト (部分的なビュー)

INSERT ステートメントがプレビューのスクリプト内で表示されていないことに気がついているかもしれません。これは、レコードは条件付きで挿入され、 INSERT ステートメントは (マッピングが実行される前は未知である) 「以下の条件で更新する」 アクションの結果 に依存するため、通常の振る舞いです。

 

メモ:        特定のデータベース 型のために、 MapForce は、 MERGE ステートメントを UPDATE ステートメントの代わりに作成します。詳細に関しては、次を参照してください:MERGE ステートメント.

 

データベースに対してスクリプトを実行するには以下を行います:

 

「出力」 メニューから、「SQL-スクリプトの実行」をクリックします。

 

マッピングが実行され、スクリプトがデータベースに適用されました。「出力」 タブ内で INSERT ステートメントが表示されていることに注意してください。

mf_db_merge_05

データベース更新後の SQL スクリプト (部分的なビュー)

メモ:MapForce から直接 SQL スクリプトを実行することは、データベースを更新する方法のひとつです。次も参照してください: データベースを変更するマッピングの実行

 

MapForce 内の DB クエリタブ内の 「Person」 テーブルを開くと  (次を参照してください: データベースの参照とクエリ)、 マッピングの結果は以下の通りです:

 

対応する主キー in XML ファイル内で、対応する主キーを持つすべてのデータベースの記録は更新されました。 例は、主キー1、 2、 3、 4 、および 5 を持つレコードです。

XML ファイル内に対応するキーをもたない全てのデータベースの記録は、影響を受けず、変更されていません。例は、主キー6、 7、 8、 および 9 を持つレコードです。

新規のレコードが (データベース内でキーが存在していない箇所である) 「Person」 テーブルに挿入されました。 例は、 主キー 30 と 31 を持つレコードです。

mf_db_merge_06

データベースを更新後の 「Person」 テーブル

(C) 2019 Altova GmbH