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

SQL Anywhere 12.0.1 » Mobile Link サーバー管理 » Mobile Link サーバーテクノロジ » 同期の方法 » 競合の解決 » 競合解決

 

upload_update スクリプトによる競合の解決

競合を解決するのに resolve_conflict スクリプトを使用する代わりに、upload_update スクリプトでストアドプロシージャーを呼び出すこともできます。この方法では、プログラムで競合の検出と解決の両方を行う必要があります。

ストアドプロシージャーは、新しい (更新後イメージの) 値と古い (更新前イメージの) 値の両方を含む、すべてのカラムを受け入れる必要があります。

以下は、upload_update スクリプトの例です。

{CALL UpdateProduct(
   {ml o.id}, {ml o.name}, {ml o.desc}, {ml r.name}, {ml r.desc}
)
}

以下は、UpdateProduct ストアドプロシージャーの例です。



CREATE PROCEDURE UpdateProduct( 
  @id INTEGER,
  @preName VARCHAR(20), 
  @preDesc VARCHAR(200),
  @postName VARCHAR(20), 
  @postDesc VARCHAR(200) ) 
BEGIN
    UPDATE product
     SET name = @postName, description = @postDesc
     WHERE id = @id
       AND name = @preName
       AND description = @preDesc
    IF @@rowcount=0 THEN
        // A conflict occurred: handle resolution here.
    END IF
END

この方法は、resolve_conflict スクリプトによる競合の解決よりも管理が簡単です。それは、管理するスクリプトが 1 つだけで、すべての論理が 1 つのストアドプロシージャーに含まれているからです。ただし、テーブルカラムが NULL 入力可の場合、または BLOB や CLOB が含まれている場合には、ストアドプロシージャーのコードが複雑になる可能性があります。また、Mobile Link 統合データベースとしてサポートされている RDBMS の一部には、ストアドプロシージャーに渡すことができる値のサイズに制限があります。

 参照
 例