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);
答
这是太长的评论。
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);
谢谢你的回答,它现在有效。 此致敬礼 – zackzulg