又一个MySQL语法错误

时间:2016-06-07 16:17:57

标签: mysql procedure

这不是我通常遇到的问题,但我现在还不明白。我试着用反引号,双引号,没有反引号,......

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第7行的''附近使用正确的语法

CREATE PROCEDURE mapping(
    p_object INT(10),
    brand VARCHAR(255),
    model VARCHAR(255))
BEGIN
    INSERT INTO `object_brand_model_mapping`
    SET `object`=p_object, `brandNameNormalized`=brand, `modelNameNormalized`=model;
END;

我也试过

INSERT INTO `object_brand_model_mapping`
    (`object`, `brandNameNormalized`, `modelNameNormalized`)
VALUES
    (p_object, brand, model);

产生完全相同的错误。

我不知道这有什么问题。是否有任何特殊规则适用于程序中的INSERT

所有列都存在。

1 个答案:

答案 0 :(得分:3)

解析器在定义过程和过程内容之间有一个共同的分隔符时会感到困惑。要解决此问题,请在创建过程之前定义不同的分隔符:

DELIMITER $$

CREATE PROCEDURE mapping(
    p_object INT(10),
    brand VARCHAR(255),
    model VARCHAR(255))
BEGIN
    INSERT INTO `object_brand_model_mapping` (`object`, `brandNameNormalized`, `modelNameNormalized`)
        VALUES (p_object, brand, model);
END$$

DELIMITER ;

来自Alex Silverstein's article on the subject

  

下一步是将默认的MySQL脚本解析器的分隔符从分号(;)更改为双美元符号($$)。这样做的原因是,解析器不会将例程体中每个语句后面的分号解释为CREATE PROCEDURE语句的结尾。这是因为整个CREATE PROCEDURE块,从CREATE PROCEDURE到END实际上是一个必须由它自己执行的语句。如果不是分隔符更改,脚本将会中断,因为BEGIN和END中的每个语句都将单独执行。请注意,您可以使用各种非保留字符来创建自己的自定义分隔符。