我在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)
答案 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);