0

私はSQLの初心者で、エラーが発生しています

#1064 - SQL 構文にエラーがあります。'@nissue INT DEFAULT 0; の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。set @nissue := (行 5 の Codes where code' から issue_id を設定します。

コードの

DELIMITER $$
CREATE TRIGGER ai_SMS
    AFTER INSERT ON SMS
    FOR EACH ROW 
BEGIN
       DECLARE @nissue INT DEFAULT 0;
       set @nissue := (set issue_id from Codes where code=NEW.msgbody);
 IF ( EXISTS(SELECT * FROM SMS_fltr AS s INNER JOIN Persons AS  p ON s.sender=p.mobile_number WHERE  s.numissue=@nissue and s.sender=NEW.sender))
       THEN
              UPDATE SMS_fltr set time=NEW.time ,code=NEW.msgbody where  numissue=@nissue and sender=NEW.sender;

       ELSE

              INSERT into SMS_fltr (sender,time,code,numissue) VAUES (NEW.sender,NEW.time,NEW.code,nissue);
       END IF
END$$
DELIMITER ;

テーブルのトリガーを作成しようとしています。

私が犯した間違いと解決策を教えてください。

4

1 に答える 1

0

提案#1:宣言しないでください

DELIMITER $$
CREATE TRIGGER ai_SMS
    AFTER INSERT ON SMS
    FOR EACH ROW 
BEGIN
       set @nissue := (set issue_id from Codes where code=NEW.msgbody);
 IF ( EXISTS(SELECT * FROM SMS_fltr AS s INNER JOIN Persons AS  p ON s.sender=p.mobile_number WHERE  s.numissue=@nissue and s.sender=NEW.sender))
       THEN
              UPDATE SMS_fltr set time=NEW.time ,code=NEW.msgbody where  numissue=@nissue and sender=NEW.sender;

       ELSE

              INSERT into SMS_fltr (sender,time,code,numissue) VAUES (NEW.sender,NEW.time,NEW.code,nissue);
       END IF
END$$
DELIMITER ;

提案 #2 : 通常の変数として宣言する

DELIMITER $$
CREATE TRIGGER ai_SMS
    AFTER INSERT ON SMS
    FOR EACH ROW 
BEGIN
       DECLARE nissue INT DEFAULT 0;
       set nissue := (set issue_id from Codes where code=NEW.msgbody);
 IF ( EXISTS(SELECT * FROM SMS_fltr AS s INNER JOIN Persons AS  p ON s.sender=p.mobile_number WHERE  s.numissue=@nissue and s.sender=NEW.sender))
       THEN
              UPDATE SMS_fltr set time=NEW.time ,code=NEW.msgbody where  numissue=@nissue and sender=NEW.sender;

       ELSE

              INSERT into SMS_fltr (sender,time,code,numissue) VAUES (NEW.sender,NEW.time,NEW.code,nissue);
       END IF
END$$
DELIMITER ;

試してみる !!!

于 2013-10-01T17:13:27.040 に答える