競合を解決するのに 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 の一部には、ストアドプロシージャに渡すことができる値のサイズに制限があります。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |