Mysql Сохраненная процедура OUT variable return NULL

Я использую ниже пример хранимой процедуры в своем приложении:

DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`sp_item`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_item`(
 IN name VARCHAR(255),
 OUT item_id INT(11)
)
BEGIN 
 DECLARE item_id INT DEFAULT 0;
 START TRANSACTION;
 INSERT INTO `item` (`name`) VALUES(name); 
 SET @item_id := LAST_INSERT_ID();
 COMMIT;
END$$
DELIMITER ;

Когда я выполняю эту процедуру, используя: -

CALL sp_item("TEST1",@item_id);

и введите последний вставленный идентификатор, используя: -

SELECT @item_id;

Затем я получаю NULL в результате, однако записи успешно добавляются в базу данных.

Я не смог найти подходящую помощь после Googling.

Что мне здесь не хватает?

1 ответ

Вы не используете параметр out (item_id). Вместо этого вы загружаете локальную переменную с похожим именем (@item_id). Попробуйте следующее:

CREATE PROCEDURE `sp_item`(
 IN name VARCHAR(255),
 OUT item_id INT(11)
)
BEGIN 
 START TRANSACTION;
 INSERT INTO `item` (`name`) VALUES(name); 
 SET item_id := LAST_INSERT_ID();
 COMMIT;
END$$

licensed under cc by-sa 3.0 with attribution.