MySQL:存储过程返回null为last_insert_id

问题描述:

我正在面对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) 

检查Here

没有参数,LAST_INSERT_ID()返回表示成功插入用于AUTO_INCREMENT列作为最近执行的INSERT语句的结果,第一自动生成的值的BIGINT UNSIGNED(64位)的值。

所以结果你越来越明显。

要获取最后一条记录,您可以使用限制。

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

谢谢你的回答,它现在有效。 此致敬礼 – zackzulg

这是太长的评论。

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);