通常、文ベースのアップロード用の競合解決スクリプトは、リモート・データベースからアップロードされるローの古い値と新しい値にアクセスする必要があります。このイベントを使用すると、リモート・データベースからアップロードされるローの古い値を処理できます。
次の表の説明では、SQL データ型を示します。Java または .NET でスクリプトを作成する場合、適切なデータ型を使用してください。SQL データ型と Java データ型とSQL データ型と .NET データ型を参照してください。
SQL スクリプトでは、名前または疑問符を使用してイベント・パラメータを指定できますが、スクリプト内に名前と疑問符を混在させることはできません。疑問符を使用する場合、パラメータは以下に示す順に指定する必要があり、後続のパラメータが指定されていない場合のみ省略可能です (たとえば、パラメータ 2 を使用する場合は、パラメータ 1 を使用してください)。名前付きパラメータを使用する場合は、パラメータの任意のサブセットを任意の順に指定できます。
SQL スクリプトのパラメータ名 | 説明 | 順序 |
---|---|---|
s.remote_id |
VARCHAR(128)。Mobile Link リモート ID。名前付きパラメータを使用している場合のみ、リモート ID を参照できます。 |
適用不可 |
s.username |
VARCHAR(128)。Mobile Link ユーザ名。このパラメータは省略可能です。 |
省略可 |
r.pk-column-1 |
古い (更新前イメージ) ローからのカラム値。名前付きパラメータは、r. を前に付けたカラム名として指定されます。 |
1 (username を参照する場合は 2) |
... | ... | |
r.pk-column-N |
古い (更新前イメージ) ローからのカラム値。名前付きパラメータは、r. を前に付けたカラム名として指定されます。 |
N (username を参照する場合は N+1) |
r.column-1 |
古い (更新前イメージ) ローからのカラム値。名前付きパラメータは、r. を前に付けたカラム名として指定されます。 |
N + 1 (username を参照する場合は N+2) |
... | ... | ... |
r.column-M |
古い (更新前イメージ) ローからのカラム値。名前付きパラメータは、r. を前に付けたカラム名として指定されます。 |
N + M (username を参照する場合は N+M+1) |
なし
Mobile Link クライアントが更新済みのローを Mobile Link サーバに送信するときは、新しい値 (更新後イメージ) だけでなく、古いローの値 (更新前イメージ) のコピーも含まれています。更新前イメージが統合データベースの現在の値と一致しないと、競合が検出されます。
このイベントを使用すると、更新前イメージの値をテーブルに保存できます。このイベントは、文ベースの更新用の競合解決プロシージャ開発を支援するために使用できます。このイベントのパラメータは、対応する統合データベース・テーブルで更新が実行される前のリモート・データベースからの古い値を保持しています。また、文ベースの強制的な競合モードで、ローを挿入するために使用されます。
このイベントのスクリプトは、resolve_conflict スクリプトが使用するテンポラリ・テーブルに古いローを挿入する INSERT 文である場合がほとんどです。
リモート・データベースのテーブルごとに、upload_old_row_insert スクリプトを 1 つ指定できます。
Java アプリケーションと .NET アプリケーションの場合、このスクリプトは有効な SQL を返します。
この例は、リモート・データベース内の product テーブルに対する更新を処理します。このスクリプトは、ローの古い値をグローバルなテンポラリ・テーブル product_conflict に挿入します。このテーブルの最後のカラムでは、ローが古いローとして識別されます。
CALL ml_add_table_script( 'ver1', 'table1', 'upload_old_row_insert', 'INSERT INTO DBA.product_conflict ( id, name, size, quantity, unit_price, row_type ) VALUES ( {ml r.id}, {ml r.name}, {ml r.size}, {ml r.quantity}, {ml r.unit_price}, ''Old'' )' ) |
次の Mobile Link システム・プロシージャ・コールは、スクリプト・バージョン ver1 を同期するときに、uploadOldRowInsertTable という Java メソッドを upload_old_row_insert テーブル・イベント用のスクリプトとして登録します。
CALL ml_add_java_table_script( 'ver1', 'table1', 'upload_old_row_insert', 'ExamplePackage.ExampleClass.uploadOldRowInsertTable' ) |
次に示すのは、サンプルの Java メソッド uploadOldRowInsertTable です。このメソッドは、INSERT 文を動的に生成します。
public String uploadOldRowInsertTable() { return( "old" + getCols(_curTable) + "values" + getNamedParams(_curTable)); } |
次の Mobile Link システム・プロシージャ・コールは、スクリプト・バージョン ver1 を同期するときに、UploadOldRowInsertTable という .NET メソッドを upload_old_row_insert テーブル・イベント用のスクリプトとして登録します。
CALL ml_add_dnet_table_script( 'ver1', 'table1', 'upload_old_row_insert', 'TestScripts.Test.UploadOldRowInsertTable' ) |
次に示すのは、サンプルの .NET メソッド UploadOldRowInsertTable です。このメソッドは、UPLOAD 文を動的に生成します。
public string UploadOldRowInsertTable() { return( "old" + GetCols(_curTable) + "values" + GetNamedParams(_curTable)); } |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |