Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » Mobile Link - サーバ管理 » Mobile Link イベント » 同期イベント

 

upload_update テーブル・イベント

リモート・データベースで更新されるローを処理するために、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 句は、リモート・データベースから更新された古い値と、統合データベースの現在の値を比較します。これらの値が一致しないと更新は無視されるので、すでに統合データベースにあった値は保持されます。

参照
SQL の例

この例は、リモート・データベース内の 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}')
Java の例

次の 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) ); 
}
.NET の例

次の 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) );
}