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_new_row_insert テーブル・イベント

通常、文ベースのアップロード用の競合解決スクリプトは、リモート・データベースからアップロードされるローの古い値と新しい値にアクセスする必要があります。このイベントを使用すると、リモート・データベースからアップロードされるローの更新済みの新しい値を処理できます。

パラメータ

次の表の説明では、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_new_row_insert スクリプトを 1 つ指定できます。

Java アプリケーションと .NET アプリケーションの場合、このスクリプトは有効な SQL を返します。

参照
SQL の例

この例は、リモート・データベース内の product テーブルに対する更新を処理します。このスクリプトは、ローの新しい値をグローバルなテンポラリ・テーブル product_conflict に挿入します。このテーブルの最後のカラムでは、ローが新しいローとして識別されます。

CALL ml_add_table_script(
 'ver1',
 'table1',
 'upload_new_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}, 
   ''New'' )' )
Java の例

次の Mobile Link システム・プロシージャ・コールは、スクリプト・バージョン ver1 を同期するときに、uploadNewRowInsertTable という Java メソッドを upload_new_row_insert テーブル・イベント用のスクリプトとして登録します。

CALL ml_add_java_table_script(
  'ver1',
  'table1',
  'upload_new_row_insert',
  'ExamplePackage.ExampleClass.uploadNewRowInsertTable'
)

次に示すのは、サンプルの Java メソッド uploadNewRowInsertTable です。このメソッドは、INSERT 文を動的に生成します。これは SQL Anywhere 統合データベース用の構文です。

public String uploadNewRowInsertTable() {
  return("insert into" + _curTable + "_new" +
    getCols(_curTable) + "values" + getNamedParams(_curTable)); 
}
.NET の例

次の Mobile Link システム・プロシージャ・コールは、スクリプト・バージョン ver1 を同期するときに、UploadNewRowInsertTable という .NET メソッドを upload_new_row_insert テーブル・イベント用のスクリプトとして登録します。

CALL ml_add_dnet_table_script(
  'ver1',
  'table1',
  'upload_new_row_insert',
  'TestScripts.Test.UploadNewRowInsertTable'
)

次に示すのは、サンプルの .NET メソッド UploadNewRowInsertTable です。このメソッドは、INSERT 文を動的に生成します。これは SQL Anywhere 統合データベース用の構文です。

public string UploadNewRowInsertTable() {
  return("insert into" + _curTable + "_new" +
    GetCols(_curTable) + "values" + GetNamedParams(_curTable)); 
}