0

warehouseストア内の記事に関する情報(外部キーおよび数量としての記事ID)を含むテーブルがあります。次に、別のテーブルがあります。このテーブルshoppinglistには、クライアントID、記事ID、および数量があります。たとえば、クライアントが3つの記事を購入したいが、利用できる記事は1つだけだとします。trigger買いすぎを防ぐのに役立つ書き方は?

私はこれを試しました:

DELIMITER $$ CREATE TRIGGER check BEFORE INSERT ON shoppinglist FOR EACH ROW BEGIN IF warehouse.quantity < shoppinglist.quantity THEN CALL fail('You cant buy that much'); END IF; END $$ DELIMITER;

しかし、これはうまくいかないようです。つまり、私がするとき:

INSERT INTO shoppinlist (clients_id, article_id, quantity) VALUES (1, 2, 100);

倉庫にid=2の記事が2つしかない場合は、問題ありません。私は何を間違えましたか?

4

1 に答える 1

1

コード内で、warehouse.quantity または shoppingList.quantity が参照する具体的な記事はどれですか? また、check予約済みのキーワードです。

これを試して:

DELIMITER $$
CREATE TRIGGER qtyCheck BEFORE INSERT ON shoppinglist 
FOR EACH ROW 
BEGIN 
  SET @qty = (SELECT quantity FROM warehouse WHERE article_id = NEW.article_id);
  IF @qty < NEW.quantity THEN
    CALL fail('You cant buy that much'); 
  END IF; 
END $$ 
DELIMITER ;

トリガーの名前を変更したことに注意してください。テーブルのarticle_id列の名前を推測しています。トリガーの本体内ではなく変数を使用しました。投稿時の誤字。warehouseNEWshoppingListDELIMITER ;

fail最後に、関数が定義されていない場合、次のエラーが発生する可能性があります。私のシステムには存在しません...

ERROR 1305: PROCEDURE testing.fail does not exist
于 2013-02-06T22:16:17.373 に答える