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

Altova MapForce 2020 Enterprise Edition

データベースを変更するマッピングを実行する場合、 MapForce (または MapForce Server、または MapForce-により生成されたプログラム) ではデータベースに関連したエラーが発生する場合があります。 例えば、データベースアカウントには、特定のデータベースアクションを実行するだけの特権がない、または無効なデータを入力、または更新することを回避するデータベース制約を実行する特権がない場合があります。後者は、列が必須で、マッピングが価を適用しない場合に発生する場合があります。

 

データベース例外が発生した場合にロールバックを可能にするには、マッピングがデータベーストランザクションを使用するように構成します。下で説明されるとおり、 データベースコンポーネントレベルとテーブルアクション レベルでトランザクションを有効化することができます。

 

データベースコンポーネントレベルでのトランザクション

データベースコンポーネントレベルでトランザクションを有効化するには、 以下を行います:

 

1.データベースコンポーネントを右クリックし、コンテキストメニューから「プロパティ」を選択します (代わりに、データベースコンポーネントのタイトルバーをダブルクリックします)。これによりデータベースコンポーネント設定 ダイアログボックスが開かれます。

mf_dbtran_00

2.「トランザクションの使用」 チェックボックスを選択します。

 

これを行うことにより、データベースコンポーネントにより行われるすべての変更がエラーを発生した場合ロールバックされるトランザクション内に囲まれます。マッピングの実行中にエラーが発生すると、出力はドロップダウンリストから選択されたオプションにより異なります:

 

トップトランザクションをロールバックし停止 — データベースコンポーネントにより行われるすべての変更を囲むトランザクションはロールバックされ、マッピングは停止されます。

トップトランザクションをロールバックし継続 — 上記同様ですが、 マッピングはロールバック後も継続されます。 (例えば、存在する場合、2番目のターゲットコンポーネントを処理する場合など)。

 

マッピングの一部は複数のデータベースコンポーネントを含んでいる可能性があります。これらは、同じデータベース接続を使用する、またはまったく異なるデータベースへの接続を使用している場合があります。 このようなマッピングの出力は、データベースエラーが発生する場合、実行エンジンによりことなります:

 

マッピングが MapForce で実行される場合マッピングの実行時、1つのターゲットコンポーネントが実行されます。「プレビュー」 btn_component_preview_pressed ボタンが有効化されている個所のコンポーネントです。そのコンポーネント内でデータベースエラーが発生し、 「トランザクションの使用」 チェックボックスが有効化されていると、コンポーネントによる全ての変更がロールバックされます。 この場合、データベースエラーが発生すると、エラーが発生する箇所でロールバックが発生し、マッピングは停止されるか、 エラーが発生する箇所で ドロップダウンリストで選択されたとおり、次のターゲットコンポーネントの実行を継続します。

 

データベースコンポーネント設定 ダイアログボックスで使用することのできるすべての設定に関数の参照に関しては、 データベースコンポーネント設定 を参照してください

 

テーブルアクションレベルでのトランザクション

トランザクション at テーブルアクション レベルでのトランザクションは、個別の(挿入、更新などの)テーブルアクションを含みます。 このセットアップでは、レコード上で挿入、または更新アクションが不足する場合、 現在失敗したアクションのみをロールバックし、他のレコードの処理を続行することができます。テーブルアクション レベルでトランザクションを実行するには、 データベーステーブルアクション ダイアログボックス 「トランザクションの使用」 チェックボックスから選択します。  (次を参照: データベーステーブルアクション設定).

mf_dbtran_01

使用することのできるオプションは以下の通りです:

 

トップトランザクションをロールバックし停止 — 親子リレーションシップを持つマッピングが複数のテーブルを更新する場合、親テーブルのためだけではなく、子テーブルのためにトランザクションを有効化することができます。トランザクションが複数のレベルで有効化することができるため、「トップ」は階層で更に高いレベルを参照することができます。 これは、そのレベルでのトランザクションが有効化されている場合、データベースコンポーネントレベルからのトランザクションです。それ以外の場合、コンポーネントには複数のネストされたテーブルアクションが存在することが仮定され、一番上のテーブルアクションで定義されたトランザクションが取られます。データを複数にリンクされているテーブルに挿入する で説明されるとおり、このオプションを理解するには、コンポーネントが複数のテーブルの階層を更新することができることを思いだしてください。 例えば、コンポーネントには、個人のレコードを挿入する親「挿入」アクション、および、個別のテーブルに各個人のレコードを挿入する1つまたは複数のネストされた「挿入」アクションが存在します。両方の挿入アクションのためにトランザクションを有効化することができ、「トップ」は階層レベルの最も高いレベルを指しています (このサンプルでは、個人がアクションを挿入しています)。このため、アドレスを挿入する際に例外が発生すると、これは(このサンプルでは、個人のテーブルレベルである)トップのトランザクションをロールバックし、実行は停止されます。すなわち、個人のアドレスを挿入できない場合、個人のレコードは挿入されません。

トップトランザクションをロールバックし継続する — 上記同様ですが、ロールバックの後もマッピングは継続されます (例えば、存在する場合、他のターゲットコンポーネントを処理するために継続されます)。

現在のトランザクションをロールバックし停止する — 例外が発生すると、このロールバックは、現在のトランザクション内で発生した変更のみをロールバックします。現在のトランザクション外で発生した変更は、コミットされます。

現在のトランザクションをロールバックし継続する — 上記同様ですが、 マッピングはロールバック後も継続されます。

 

ストアドプロシージャ-レベル トランザクション

ストアドプロシージャのためのデータターゲットと呼ばれるデータベーストランザクションを有効化することができます。例えば、 ターゲットコンポーネント内のストアドプロシージャ を参照してください。 (入力パラメーターを持たない)データソースとして呼び出される、または関数のように呼び出される (入力と出力を持つ)ストアドプロシージャのためにはトランザクションはサポートされていません。 .

 

ロールバック

トランザクションがマッピングランタイムに発生するかを確認するには、「出力」 タブをクリックして、 MapForce により生成された疑似-SQL codeコードを確認します。下のイメージは、コンポーネントレベルとテーブルアクションレベルでトランザクションが有効化されているマッピングのプレビューを示しています。下に示されているとおり、メインのトランザクションは各オペレーションのために発生します (コメント --begin transaction--commit transaction により識別されます )。 また、複数の小さいトランザクションは各入力オペレーションのために発生します (SAVEPOINT コマンドにより識別されます)。

mf_dbtran_02

マッピングが MapForce Server または MapForce により生成されたプログラムにより実行されると、上記のとおり、マッピングのデザイン中に構成されたオプションに基づきロールバックが実行されます。 例えば、オプション 「トップトランザクションをロールバックし停止」 を選択すると、他の挿入が成功した場合でも、失敗した入力オペレーションにより全ての変更がロールバックされます。しかしながら、「現在のトランザクションをロールバックし継続する」を選択すると、失敗した挿入が最も近い保存ポイントにロールバックされ、マッピングは他のレコードを挿入しようと試みます。

 

メニューコマンド 「出力 | Run SQL-スクリプトの実行」を使用して MapForce 内でトランザクションが有効化されたマッピングを直接実行すると、ダイアログボックスはデータベースの例外が発生したかを通知します。 例:

mf_dbtran_03

以降の振る舞いを変更することができます:

 

このトランザクションをロールバックし停止する - これは、現在のトランザクションに含まれる変更のみをロールバックし、マッピングの実行を停止します。現在のトランザクションの外部で前に行われた変更はコミットされます。

このトランザクションをロールバックし継続する - 上記同様ですが、マッピングロールバック後も実行されます。チェックボックス ロールバックして全てのエラーのために継続する を選択して、更にエラーが発生した場合、ダイアログボックスを抑制します。

すべてをロールバックし停止する - このデータベース呼び出し内のすべてのトランザクションは、ロールバックされ、マッピングの実行は停止されます。

(C) 2019 Altova GmbH