Ошибка при создании процедуры mysql CRUD - PullRequest
0 голосов
/ 05 октября 2018

Я получаю синтаксическую ошибку в строке 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`)
)

1 Ответ

0 голосов
/ 05 октября 2018
  • Вам нужно переопределить 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 ;
...