1

mysqlデータベースでトリガーを実行しようとしています。コマンドは正常に実行されますが、トリガーが機能しません。

DELIMITER #

CREATE TRIGGER generate_coupon AFTER INSERT ON order
FOR EACH ROW
BEGIN

DECLARE userid, couponvalue INT;
DECLARE couponcode VARCHAR;
SELECT idUser INTO userid FROM indication WHERE email = NEW.email;
SET couponvalue = 20;
SET couponcode = 'abc123';

INSERT INTO coupon(idUser,idOrder,couponvalue,couponcode) values(userid, NEW.id, couponvalue, couponcode);

END# 

DELIMITER ;
4

1 に答える 1

1

couponvalue問題は、変数間およびテーブルcouponcode内の同じ名前の列との衝突から発生していると思われますcouponローカル変数のスコープと解決策で説明されているように:

ローカル変数は、テーブル列と同じ名前であってはなりません。

トリガーを次のように単純化して、この問題を完全に回避することができます。

CREATE TRIGGER generate_coupon AFTER INSERT ON order FOR EACH ROW
  INSERT INTO coupon
    (idUser, idOrder, couponvalue, couponcode)
  SELECT idUser, NEW.id, 20, 'abc123'
  FROM   indication
  WHERE  email = NEW.email
;
于 2012-11-26T12:52:27.880 に答える