Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:存储过程为最后一个插入id返回null_Mysql - Fatal编程技术网

MySQL:存储过程为最后一个插入id返回null

MySQL:存储过程为最后一个插入id返回null,mysql,Mysql,我在mySql中遇到了一个SP问题,当我想选择我的标识符时,它总是将null作为值 DELIMITER $$ CREATE PROCEDURE insert_details_facture(IN typefacture INT, IN codeactivite VARCHAR(255), IN qte INT, IN pu DOUBLE, IN unite VAR

我在mySql中遇到了一个SP问题,当我想选择我的标识符时,它总是将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$$
CALL insert_details_facture(10,'l',10,12,'l',20)
当我执行此命令时,它将identite=numfacture作为列的名称,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$$
CALL insert_details_facture(10,'l',10,12,'l',20)
检查

在没有参数的情况下,LAST_INSERT_ID()返回一个BIGINT无符号(64位)值,该值表示由于最近执行的INSERT语句而成功为自动增量列插入的第一个自动生成的值

所以你们得到的结果是显而易见的

要获取最后一条记录,可以使用limit

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

这篇评论太长了

LAST\u INSERT\u ID()
不保证具有有效值。例如,各国:

如果上一条语句返回错误,则 最后一次插入的ID()未定义。对于事务表,如果 语句由于错误而回滚,值为 最后一个插入ID()未定义

类似地,如果当前会话没有数据库更改,则该值将是未定义的

此外,如果要设置值,请在
选择中使用
:=

SELECT identete := numfacture
FROM entetefacture
WHERE numfacture = LAST_INSERT_ID();
为什么不使用
limit
获取表中的最后一行呢

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