リモート・データベースで更新されるローを処理するために、Mobile Link サーバがアップロード処理中に使用するイベントを提供します。
パラメータ | 順序 |
---|---|
r.column-1 | 1 |
... | ... |
r.column-M | M |
r.pk-column-1 | M + 1 |
... | ... |
r.pk-column-N | M + N |
o.column-N | M + N + 1 |
... | ... |
o.column-M | M + N + M |
なし
文ベースの upload_update スクリプトは、UPLOAD 文で指定されたカラム値の直接更新を実行できます。
WHERE 句には、同期するプライマリ・キー・カラムをすべて含めます。SET 句には、同期する非プライマリ・キー・カラムをすべて含めます。
SET 句にはテーブルにある非プライマリ・キー・カラムをすべて指定します。Mobile Link は、適切な数のカラム値を送信します。また、WHERE 句には必要な数だけプライマリ・キーを指定できますが、ここですべてを指定してください。Mobile Link は適切な値を送信し、これらのカラム値とプライマリ・キー値を、スキーマの Mobile Link レポートに表示される順に送信します。-vh オプションを使用すると、このテーブル・スキーマのカラムの順序を指定できます。
たとえば、次の upload_update スクリプトでは、疑問符が適切な順序になっています。
UPDATE MyTable SET column_1 = ?, ..., column_M = ? WHERE pk_column_1 = ? AND ... AND pk_column_N = ? |
リモート・データベースのテーブルごとに、upload_update スクリプトを 1 つ指定できます。
Java アプリケーションと .NET アプリケーションの場合、このスクリプトは有効な SQL を返します。
upload_update スクリプトを使用して競合を検出するには、以下のようにすべての 非プライマリ・キー・カラムを WHERE 句に含めます。
UPDATE table-name SET col1 = {ml r.col1}, col2 = {ml r. col2 } ... WHERE pk1 = {ml r.pk1} AND pk2 = {ml r.pk2} ... AND col1 = {ml o.col1} AND col2 ={ml o.col2} ...
この文では、col1 と col2 はプライマリ・キー・カラムではありませんが、pk1 と pk2 はプライマリ・キー・カラムです。非プライマリ・キー・カラムの 2 番目のセットに渡される値は、更新ローの更新前イメージです。WHERE 句は、リモート・データベースから更新された古い値と、統合データベースの現在の値を比較します。これらの値が一致しないと更新は無視されるので、すでに統合データベースにあった値は保持されます。
この例は、リモート・データベース内の Customer テーブルに対する更新を処理します。このスクリプトは、統合データベース内のテーブル Customer 内の値を更新します。
CALL ml_add_table_script( 'ver1', 'table1', 'upload_update', 'UPDATE Customer SET name = {ml r.name}, rep_id = {ml r.rep_id} WHERE cust_id = {ml o.cust_id}') |
次の Mobile Link システム・プロシージャ・コールは、スクリプト・バージョン ver1 を同期するときに、uploadUpdateTable という Java メソッドを upload_update テーブル・イベント用のスクリプトとして登録します。
CALL ml_add_java_table_script( 'ver1', 'table1', 'upload_update', 'ExamplePackage.ExampleClass.uploadUpdateTable' ) |
次に示すのは、サンプルの Java メソッド uploadUpdateTable です。このメソッドは、UPLOAD 文を動的に生成する genUU というメソッドを呼び出します。
public String uploadUpdateTable() { return( genUU(_curTable) ); } |
次の Mobile Link システム・プロシージャ・コールは、スクリプト・バージョン ver1 とテーブル table1 を同期するときに、UploadUpdate という .NET メソッドを upload_update テーブル・イベント用のスクリプトとして登録します。
CALL ml_add_dnet_table_script( 'ver1', 'table1', 'upload_update', 'TestScripts.Test.UploadUpdate' ) |
次に示すのは、サンプルの .NET メソッド UploadUpdate です。このメソッドは、UPLOAD 文を動的に生成する GenUU というメソッドを呼び出します。
public string UploadUpdate() { return ( genUU(_curTable) ); } |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |