【问题标题】:MySQL CREATE TRIGGER IF variable is greater than set value error 1064MySQL CREATE TRIGGER IF 变量大于设置值错误 1064
【发布时间】:2017-09-20 14:09:03
【问题描述】:

我已经在这个网站和 Google 上搜索了一个多小时,试图弄清楚为什么会收到这条消息:

错误代码:1064。您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 '@msg = 'HIGH VALUE CUSTOMER - SALES GREATER THAN 附近使用的语法 $10K' IF (SALES > 10000) THEN' 在第 5 行

...运行 SQL 以创建此触发器时:

CREATE TRIGGER TOP_CUSTOMERS
AFTER INSERT ON ORDERS
FOR EACH ROW BEGIN
DECLARE msg VARCHAR(100)
    @msg = 'HIGH VALUE CUSTOMER - SALES GREATER THAN $10K'
IF (SALES > 10000) THEN
    SET CUSTOMERNOTES = @msg 
ENDIF

这是一个明天晚上午夜前到期的作业,我很难过,因为我尝试的所有内容都与示例使用相同的语法,而且我不想创建复杂的触发器。请帮忙!?!?!

【问题讨论】:

    标签: mysql syntax-error


    【解决方案1】:

    我最终弄明白了......这对我有用:

    DELIMITER ||
    CREATE TRIGGER TOP_CUSTOMERS
    AFTER INSERT ON ORDERS
    FOR EACH ROW BEGIN
    DECLARE CUSTOMERNOTES VARCHAR(100);
        IF (SALES > 10000) THEN
            SET CUSTOMERNOTES = 'HIGH VALUE CUSTOMER - SALES GREATER THAN $10K';
        END IF;
    END;
    ||
    DELIMITER ;
    

    感谢所有回复的人指出我正确的方向。

    【讨论】:

      【解决方案2】:

      这个查询有很多错误,语法,变量定义,分隔符等等......甚至内部逻辑也不清楚,你应该先阅读CREATE PROCEDURE and CREATE FUNCTION Syntax,这里我只修复一些语法错误:

      DELIMITER ||
      CREATE TRIGGER TOP_CUSTOMERS
      AFTER INSERT ON ORDERS
      FOR EACH ROW BEGIN
      DECLARE msg VARCHAR(100) DEFAULT 'HIGH VALUE CUSTOMER - SALES GREATER THAN $10K';
          IF (SALES > 10000) THEN
              SET CUSTOMERNOTES = msg;
          END IF;
      END;
      ||
      DELIMITER ;
      

      编辑:

      DELIMITER ||
      CREATE TRIGGER TOP_CUSTOMERS
      BEFORE INSERT ON ORDERS
      FOR EACH ROW BEGIN
      DECLARE msg VARCHAR(100) DEFAULT 'HIGH VALUE CUSTOMER - SALES GREATER THAN $10K';
          IF (NEW.SALES > 10000) THEN
              SET NEW.CUSTOMERNOTES = msg;
          END IF;
      END;
      ||
      DELIMITER ;
      

      【讨论】:

      • 我只收到 1 条语法错误消息,而不是多条。我有基本的 SQL 数据挖掘经验,但这是我第一次深入研究触发器。感谢您的帮助!
      • 请解释DELIMITER ||的使用。这应该是一个非常简单的触发器,如果​​在插入数据后,如果 SALES > $10,000 设置 CUSTOMERNOTES = 'HIGH VALUE CUSTOMER - SALES GREATER THAN $10K'。 CUSTOMERNOTES 是 ORDERS 表中的一个字段,它不是系统变量...而且我不断收到“未声明的系统变量 'CUSTOMERNOTES' 错误消息。
      • 我尝试运行上面建议的代码,但收到不同的错误代码:1193。
      • 关于分升,请阅读官方文档;关于逻辑,请检查 edit 部分。 @MattMitchell
      猜你喜欢
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多