2013-01-04 93 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您必須刪除前導'@'。我編輯了答案,使其更加清晰。 –