0

在庫と注文の2つのテーブルがあり、注文が発注された後、在庫数量フィールドから取り除かれるようにトリガーを機能させようとしています。

DELIMITER $$
CREATE TRIGGER stock_update 
AFTER INSERT ON order
FOR EACH ROW
BEGIN
SET @quantity = NEW.quantity 
UPDATE stock s;
SET s.quantity = OLD.quantity - NEW.quantity
FROM stock s, order o
WHERE s.ID_stock = o.ID_stock;
END;
$$
DELIMITER;

しかし、私はエラー番号1064を取得しています

4

2 に答える 2

0

テストするにはテーブル定義が必要になるため、うまくいくかどうかはわかりません。いずれの場合FROMも、句と最後の行を削除する必要がありますDELIMITER;SET @quantity = NEW.quantityまた、セミコロンで行を終了する必要があります。

DELIMITER $$
CREATE TRIGGER stock_update 
AFTER INSERT ON order FOR EACH ROW
BEGIN
    UPDATE stock s;
     SET s.quantity = OLD.quantity - NEW.quantity
    WHERE s.ID_stock = NEW.ID_stock;
END;
$$
于 2013-04-15T11:24:09.663 に答える
0

いくつかの問題があります。

  1. order は予約語なので、前後にバックティックを使用する必要があります
  2. 変数 @quantity を使用する必要はありません
  3. 更新ステートメントが間違っていた
  4. DELIMITER と ; スペースで区切る必要があります

これを試して

DELIMITER $$
CREATE TRIGGER stock_update 
AFTER INSERT ON `order`
FOR EACH ROW
BEGIN
UPDATE stock s 
   SET s.quantity = s.quantity - NEW.quantity
 WHERE s.ID_stock = NEW.ID_stock;
END $$
DELIMITER ;
于 2013-04-15T11:27:10.647 に答える