2016-05-16 126 views
1

我正在面對mySql中的SP問題,當我想選擇我的標識時,它始終爲null。MySQL:存儲過程返回null爲last_insert_id

DELIMITER $$ 
CREATE PROCEDURE insert_details_facture(IN typefacture INT, 
       IN codeactivite VARCHAR(255), 
       IN qte INT, 
       IN pu DOUBLE, 
       IN unite VARCHAR(255), 
       IN montant DOUBLE) 
BEGIN 
DECLARE identete INT; 
SELECT identete = numfacture FROM entetefacture WHERE numfacture = LAST_INSERT_ID(); 
END$$ 

當我執行它時,它給出identite = numfacture作爲列的名稱和null作爲值。

CALL insert_details_facture(10,'l',10,12,'l',20) 

回答

2

檢查Here

沒有參數,LAST_INSERT_ID()返回表示成功插入用於AUTO_INCREMENT列作爲最近執行的INSERT語句的結果,第一自動生成的值的BIGINT UNSIGNED(64位)的值。

所以結果你越來越明顯。

要獲取最後一條記錄,您可以使用限制。

SET identete = (SELECT numfacture FROM entetefacture ORDER BY id DESC LIMIT 1); 
+0

謝謝你的回答,它現在有效。 此致敬禮 – zackzulg

1

這是太長的評論。

LAST_INSERT_ID()不保證具有有效的值。例如,documentation狀態:

如果前面的語句返回一個錯誤, LAST_INSERT_ID()的值是不確定的。對於事務性表,如果 語句由於錯誤而回滾,則LAST_INSERT_ID()的值未定義。

同樣,如果當前會話沒有數據庫更改,則該值將是未定義的。

另外,如果你想設置的值,然後在select使用:=

SELECT identete := numfacture 
FROM entetefacture 
WHERE numfacture = LAST_INSERT_ID(); 

爲什麼不乾脆讓使用limit表中的最後一行?

SET identete = (SELECT numfacture FROM entetefacture ORDER BY id LIMIT 1);