2013-01-04 94 views
3

我在我的应用程序中使用下面的示例存储过程:MySQL存储过程OUT变量返回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); 

,并使用获取最后插入的ID : -

SELECT @item_id; 

然后,我得到NULL作为结果,但记录插入成功到数据库。

谷歌搜索后我找不到任何相关的帮助。

我在这里失踪了什么?

回答

5

您没有使用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$$ 
+0

谢谢你把我放在正确的轨道上。 – neeraj

+0

那么它怎么叫? – cerd

+0

@cerd您必须删除前导'@'。我编辑了答案,使其更加清晰。 –