我一直在第9行发现语法错误

CREATE PROCEDURE `ItemsAddOrEdit`(
_itm_id INT,
_itm_name VARCHAR(255),
_itm_price FLOAT(8,2)
)
BEGIN
    IF _itm_id = 0 THEN
    INSERT INTO items (itm_name, itm_price)
    VALUES (_itm_name, _itm_price);
ELSE
    UPDATE items
    SET
        itm_name = _itm_name,
        itm_price = _itm_price
    WHERE itm_id = _itm_id;
END IF;
END

变量是问题所在吗?我查了一下桌子,看是不是把名字弄乱了,但我觉得一切都很好。
这是表格代码
CREATE TABLE `items` (
`itm_id` INT(255) NOT NULL AUTO_INCREMENT,
`itm_name` VARCHAR(255) NOT NULL,
`itm_price` FLOAT(8,2) NOT NULL,
PRIMARY KEY (`itm_id`),
UNIQUE INDEX `itm_name` (`itm_name`)
)

最佳答案

您需要将Delimiter重新定义为其他值,例如:$$。这允许解析器忽略;(因此到达;时不执行语句)。
另外,作为一个好的实践,总是使用DROP PROCEDURE IF EXISTS,以避免万一有相同名称的程序已经失败。
最后,将分隔符重新定义为;
请尝试以下操作:

DELIMITER $$

DROP PROCEDURE IF EXISTS `ItemsAddOrEdit` $$

CREATE PROCEDURE `ItemsAddOrEdit`(
_itm_id INT,
_itm_name VARCHAR(255),
_itm_price FLOAT(8,2)
)
BEGIN
    IF _itm_id = 0 THEN
    INSERT INTO items (itm_name, itm_price)
    VALUES (_itm_name, _itm_price);
ELSE
    UPDATE items
    SET
        itm_name = _itm_name,
        itm_price = _itm_price
    WHERE itm_id = _itm_id;
END IF;
END $$

DELIMITER ;

关于mysql - 创建过程mysql CRUD时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52671758/

10-10 16:29