2013-07-16 110 views
3

我在MySQL中有一個存儲過程,它從表中獲取下一個唯一的ID,用作另外兩個表的ID(不是最好的方式,我當然,但我在這裏修改別人的代碼)。其過程如下:MySQL存儲過程:沒有設置OUT參數

DELIMITER $$ 
CREATE DEFINER=`root`@`%` PROCEDURE `GetNextID`(OUT id bigint) 
BEGIN 
    DECLARE uid VARCHAR(255); 
    SET uid = uuid(); 
    INSERT INTO `ident_column_generator` (u) VALUES (uid); 
    SELECT ID INTO id FROM `ident_column_generator` WHERE u = uid; 
    DELETE FROM `ident_column_generator` WHERE u = uid; 
END$$ 

當我打電話從MySQL Workbench中的程序:

CALL GetNextID(@id); 
SELECT @id; 

@id是NULL。我無法弄清楚發生了什麼問題?即使我在調用該過程之前運行SET @id = 0;,之後它也會以NULL結尾。如果我從MySQL工作臺,@id輸出細,例如:

SET @uid = uuid(); 
INSERT INTO `ident_column_generator` (u) VALUES (@uid); 
SELECT ID INTO @id FROM `ident_column_generator` WHERE u = @uid; 
DELETE FROM `ident_column_generator` WHERE u = @uid; 
SELECT @id; 

手動調用過程內的功能這輸出@id爲有效數字。

任何想法爲什麼id沒有被正確設置?

回答

3

通常情況下,花了3個小時,然後只是在我發佈問題後,我發現問題。所以,爲了將來的參考:在變量涉及的地方,MySQL似乎不區分大小寫。 ID列名和id變量顯然完全混淆了它。

我將程序的輸入參數名稱更改爲retId,然後完美運行。

+0

與我發生同樣的問題........ :) –

0

感謝尼克,我也有同樣的問題。列名和變量名是相同的,因此我們遇到了這個問題。