ローレベルの競合検出のために、統合データベース内の同期テーブルからローをフェッチするデータスクリプトです。
SQL スクリプトでは、名前または疑問符を使用してイベントパラメーターを指定できます。疑問符の使用は推奨されなくなりました。名前付きパラメーターを使用することをおすすめします。1 つのスクリプト内で名前と疑問符を混在させることはできません。疑問符を使用する場合、パラメーターは以下に示す順に指定する必要があり、後続のパラメーターが指定されていない場合のみ省略可能です (たとえば、パラメーター 2 を使用する場合は、パラメーター 1 を使用してください)。名前付きパラメーターを使用する場合は、パラメーターの任意のサブセットを任意の順に指定できます。
SQL スクリプトのパラメーター名 | 説明 | 順序 (SQL では非推奨) |
---|---|---|
s.remote_id |
VARCHAR(128)。Mobile Link リモート ID。名前付きパラメーターを使用している場合のみ、リモート ID を参照できます。 |
なし |
s.username |
VARCHAR(128)。Mobile Link ユーザー名。このパラメーターはオプションです。 |
省略可 |
r. primary-key-1 |
必須。カラム名またはカラム番号で参照される最初のプライマリキーカラム値。 |
1 (username を参照する場合は 2) |
r. primary-key-2 |
必須。カラム名またはカラム番号で参照される 2 番目のプライマリキーカラム値。 |
2 |
... |
... |
... |
r. primary-key-N |
必須。カラム名またはカラム番号で参照される最後のプライマリキーカラム値。 |
N (username を参照する場合は N+1) |
なし。
upload_fetch スクリプトは、upload_update イベントに対応します。
結果セットのカラムは、このテーブルについてリモートデータベースからアップロードされるカラムの数や順序と一致します。返される値がアップロードされるローの更新前のイメージと一致しないと、競合が識別されます。
upload_fetch スクリプトでは READPAST テーブルヒントを使用しないでください。スクリプトが READPAST を使用してロックされたローをスキップした場合、同期論理は、そのローが削除されたものとみなします。これにより、定義したスクリプトに応じて、アップロードされた更新が無視されるか、または競合解決がトリガーされます。更新の無視は、許容されない動作であることが多く、問題になる場合があります。実装している解決論理によっては、競合解決がトリガーされても問題にならない場合があります。
リモートデータベースのテーブルごとに、upload_fetch または upload_fetch_column_conflict スクリプトを 1 つのみ指定できます。
このスクリプトは SQL で実装してください。 Java または .NET のローの処理については、ダイレクトローハンドリングを参照してください。
以下のスクリプトが 1 つも定義されていない場合、このスクリプトは無視されます。upload_new_row_insert、upload_old_row_insert、resolve_conflict
次の SQL スクリプトは、Contact の例から抜粋したもので、%SQLANYSAMP12%\MobiLink\Contact\build_consol.sql にあります。リモートデータベースの Product テーブル内で更新されるローのアップロード時に発生する競合を識別するために使用されます。このスクリプトは、テーブル Product からローを選択しますが、統合データベースとリモートデータベースのスキーマによっては、2 つのテーブルの名前が一致しない場合があります。
CALL ml_add_table_script( 'ver1', 'Product', 'upload_fetch', 'SELECT id, name, size, quantity, unit_price FROM Product WHERE id={ml r.id}' ) |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |