2017-05-23 20 views
1

私はのsqlite3データベースに次のスキーマを持っています。SQLトリガー:更新の前に

これは、製品に対するユーザーの入札価格を格納し、アプリケーションコードから有効性チェックをオフロードするために使用するトリガーです。

ここでの目標は、新しい入札単価が前回の入札額よりも大きいかどうかを確認し、そうでない場合はアプリケーションにエラーを発生させることです。 INSERTではうまくいきますが、UPDATEは、NEW.amountが実際には特定の商品の最大入札価格であってもエラーが発生します。

トリガがデバッグできないため、なぜこのようなことが起こっているのかわかりません。これについての提案もまた非常に高く評価されます。

CREATE TABLE IF NOT EXISTS bids (
    amount INTEGER NOT NULL, 
    product_id INTEGER NOT NULL, 
    user_id INTEGER NOT NULL, 
    submitted DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP 
); 

CREATE TRIGGER IF NOT EXISTS trig_beforeinsert BEFORE INSERT ON bids 
BEGIN 
    SELECT CASE 
     WHEN 
      ((SELECT MAX(amount) FROM bids WHERE product_id = NEW.product_id) >= NEW.amount) 
     THEN 
      RAISE (FAIL, "invalid amount") 
    END; 
END; 

CREATE TRIGGER IF NOT EXISTS trig_beforeupdate_amount BEFORE UPDATE OF amount ON bids 
BEGIN 
    SELECT CASE 
     WHEN 
      ((SELECT MAX(amount) FROM bids WHERE product_id = OLD.product_id) >= NEW.amount) 
     THEN 
      RAISE (FAIL, "invalid amount") 
    END; 
END; 

答えて

0

実際には、これは私がここに投稿する前に分かっていたアプリケーション固有のエラーでした。

関連する問題