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

SQL Anywhere 12.0.1 » SQL Remote » SQL Remote システムの作成 » 更新の競合 » トリガーを使用したカスタム競合解決

 

在庫競合解決

スポーツ用品メーカーのための倉庫システムがあるとします。製品情報のテーブルには、各製品の在庫数を記録する Quantity カラムがあります。このカラムへの更新は、通常は在庫数を引いていくことであり、新しく製品が搬入される場合は、在庫数を追加します。

リモートデータベースで営業担当者が受注を入力し、S サイズのタンクトップ T シャツの在庫を 5 枚差し引いて 28 から 23 としました。この在庫数も担当者のデータベースに入力されます。一方、この更新内容が統合データベースにレプリケートされる前に、別の営業担当者は T シャツの返品を 40 枚受け取りました。この営業担当者は、自分のリモートデータベースに返品を入力し、倉庫での変更を統合データベースにレプリケートして、Quantity カラムの値を 40 追加して 68 とします。

最初の更新で Quantity 列に 40 が追加されます。

このエントリがデータベースに追加され、現在の Quantity カラムは、在庫に 68 枚の S サイズのタンクトップ T シャツがあることを示しています。ここで最初の営業担当者からの更新を受信すると、28 から 23 に変更するという内容にもかかわらず、実際のカラム値は 68 であるという競合が SQL Anywhere で検出されます。

デフォルトでは、より新しい更新が処理され、在庫レベルが間違った値 23 に設定されます。

不適切な競合解決。2 番目の更新が最初の更新を不適切に上書きします。

この例の競合は、データベースの最終的な値が 63 になるように、在庫のカラムに対する変更を合計した結果を算出して解決してください。

正しい競合解決。2 番目の更新が最初の更新を修正します。
 解決の実装