MySQL:存储过程为last_insert_id返回null

时间:2016-05-16 10:47:53

标签: mysql

我在mySql中遇到SP问题,当我想选择我的identete时,它总是将null作为值。

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 个答案:

答案 0 :(得分:2)

检查Here

  

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

所以你得到的结果很明显。

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

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

答案 1 :(得分:1)

评论太长了。

LAST_INSERT_ID()不保证具有有效值。例如,documentation州:

  

如果前一个语句返回错误,则返回值   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);