简体   繁体   中英

MySQL : Stored procedure returns null for last_insert_id

I'm facing a problem with SP in mySql when I want to select my identete it gives always null as value.

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$$

When I execute this it gives identite = numfacture as column's name and null as value.

CALL insert_details_facture(10,'l',10,12,'l',20)

Check Here .

With no argument, LAST_INSERT_ID() returns a BIGINT UNSIGNED (64-bit) value representing the first automatically generated value successfully inserted for an AUTO_INCREMENT column as a result of the most recently executed INSERT statement .

so result you are getting is obvious.

to get last record you can use limit.

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

This is too long for a comment.

LAST_INSERT_ID() is not guaranteed to have a valid value. For instance, the documentation states:

If the previous statement returned an error, the value of LAST_INSERT_ID() is undefined. For transactional tables, if the statement is rolled back due to an error, the value of LAST_INSERT_ID() is left undefined.

Similarly, if there have been no database changes for the current session, then the value will be undefined.

Also, if you want to set the value, then use := in a select :

SELECT identete := numfacture
FROM entetefacture
WHERE numfacture = LAST_INSERT_ID();

Why not just get the last row in the table using limit ?

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM