通常、文ベースのアップロード用の競合解決スクリプトは、リモートデータベースからアップロードされるローの古い値と新しい値にアクセスする必要があります。このデータスクリプトイベントを使用すると、リモートデータベースからアップロードされるローの更新済みの新しい値を処理できます。
次の表の説明では、SQL データ型を示します。Java または .NET でスクリプトを作成する場合、適切な対応するデータ型を使用する必要があります。 SQL データ型と Java データ型とSQL データ型と .NET データ型を参照してください。
SQL スクリプトでは、名前または疑問符を使用してイベントパラメーターを指定できます。疑問符の使用は推奨されなくなりました。名前付きパラメーターを使用することをおすすめします。1 つのスクリプト内で名前と疑問符を混在させることはできません。疑問符を使用する場合、パラメーターは以下に示す順に指定する必要があり、後続のパラメーターが指定されていない場合のみ省略可能です (たとえば、パラメーター 2 を使用する場合は、パラメーター 1 を使用してください)。名前付きパラメーターを使用する場合は、パラメーターの任意のサブセットを任意の順に指定できます。
SQL スクリプトのパラメーター名 | 説明 | 順序 (SQL では非推奨) |
---|---|---|
s.remote_id |
VARCHAR(128)。Mobile Link リモート ID。名前付きパラメーターを使用している場合のみ、リモート ID を参照できます。 |
適用不可 |
s.username |
VARCHAR(128)。Mobile Link ユーザー名。このパラメーターは省略可能です。 |
オプション (参照される場合は 1) |
r. pk-column-1 |
必須。カラム名またはカラム番号で参照される、新しい (更新後イメージ) ローの最初のプライマリキーカラム値。 |
1 (username を参照する場合は 2) |
... | ... | ... |
r. pk-column-N |
必須。カラム名またはカラム番号で参照される、新しい (更新後イメージ) ローの最後のプライマリキーカラム値。 |
N (username を参照する場合は N+1) |
r. column-1 |
必須。カラム名またはカラム番号で参照される、新しい (更新後イメージ) ローの最初の非プライマリキーカラム値。 |
N + 1 (username を参照する場合は N+2) |
... | ... | ... |
r. column-M |
必須。カラム名またはカラム番号で参照される、新しい (更新後イメージ) ローの最後の非プライマリキーカラム値。 |
N + M (username を参照する場合は N+M+1) |
なし。
Mobile Link クライアントが更新済みのローを Mobile Link サーバーに送信するときは、新しい値 (更新後イメージ) だけでなく、古いローの値 (更新前イメージ) のコピーも含まれています。更新前イメージが統合データベースの現在の値と一致しないと、競合が検出されます。
Mobile Link による競合の検出後、このイベントを使用すると、更新後イメージの値をテーブルに保存できます。このイベントは、更新用の競合解決プロシージャー開発を支援するために使用できます。このイベントのパラメーターは、対応する統合データベーステーブルで更新が実行される前のリモートデータベースからの新しい値を保持しています。また、強制的な競合モードで、ローを挿入するために使用されます (強制的な競合モードは推奨されなくなりました)。
通常、競合検出は、upload_update スクリプトで一度に実行されるとより早く実行できます。 upload_update テーブルイベントを参照してください。
このイベントのスクリプトは、resolve_conflict スクリプトが使用するテンポラリテーブルに新しいローを挿入する INSERT 文である場合がほとんどです。
リモートデータベースのテーブルごとに、upload_new_row_insert スクリプトを 1 つ指定できます。
このスクリプトは SQL で実装してください。 Java または .NET のローの処理については、ダイレクトローハンドリングを参照してください。
この例は、リモートデータベース内の 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'' )' ) |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |