Bug #5017 | LAST_INSERT_ID called from within Stored Procedures | ||
---|---|---|---|
Submitted: | 12 Aug 2004 12:51 | Modified: | 12 Oct 2004 15:57 |
Reporter: | Naresh Sadhnani | Email Updates: | |
Status: | Not a Bug | Impact on me: | |
Category: | MySQL Server: User-defined functions ( UDF ) | Severity: | S3 (Non-critical) |
Version: | 5.0.0-alpha | OS: | Linux (Linux / FreeBSD) |
Assigned to: | Per-Erik Martin | CPU Architecture: | Any |
[12 Aug 2004 12:51]
Naresh Sadhnani
[12 Aug 2004 14:39]
Naresh Sadhnani
This is found on the FreeBSD as well not only on RedHat 9.0
[13 Aug 2004 23:13]
Matthew Lord
I verified this using 5.0.1-alpha on x86 linux (2.4.21 #12 SMP). @A is NULL rather than 1. CREATE TABLE `temp` ( `ID` int(11) NOT NULL auto_increment, `Name` varchar(50) NOT NULL default '', PRIMARY KEY (`ID`) ); \d | CREATE PROCEDURE `test`(strName varchar(50),out intID int) begin insert into temp (Name) values (strName); set @intID = LAST_INSERT_ID(); end \d ; call test('Badger', @A); select @A;
[12 Oct 2004 14:02]
[ name withheld ]
Even SELECT @test = LAST_INSERT_ID(); fails. However SELECT @test := LAST_INSERT_ID(); works. Spot the difference. Also SET @test = 1; works. I wonder if this is the intended syntax or a bug.
[12 Oct 2004 15:57]
Per-Erik Martin
There's an error in the test case. set @intID = LAST_INSERT_ID(); sets the (global) user variable intID, not the local parameter. It should be: set intID = LAST_INSERT_ID();
[25 Nov 2004 3:25]
Gregg H
I am running under win2000... and seem to have the following problem related to the one described here.... C:\MYSQL\BIN>mysql p2 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 61 to server version: 5.0.0-alpha-max-debug Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> delimiter // mysql> mysql> cREATE TABLE `temp` ( `ID` int(11) NOT NULL auto_increment, `Name` varch r(50) NOT NULL default '', PRIMARY KEY (`ID`) )// Query OK, 0 rows affected (0.08 sec) mysql> mysql> drop procedure insertproc// ERROR 1289 (42000): PROCEDURE insertproc does not exist mysql> create procedure insertproc(in s char (20), out param1 int) -> begin -> insert into temp (name) values (s); -> set param1 := last_insert_id() ; -> end -> // Query OK, 0 rows affected (0.00 sec) mysql> delimiter ; mysql> call insertproc("xx",@a); Query OK, 0 rows affected (0.00 sec) mysql> select @a; +------+ | @a | +------+ | 0 | +------+ 1 row in set (0.00 sec) mysql> mysql> select last_insert_id(); +------------------+ | last_insert_id() | +------------------+ | 1 | +------------------+ 1 row in set (0.00 sec) mysql> mysql> call insertproc("xx1",@b); Query OK, 0 rows affected (0.00 sec) mysql> select @b; +------+ | @b | +------+ | 0 | +------+ 1 row in set (0.00 sec) mysql> mysql> select last_insert_id(); +------------------+ | last_insert_id() | +------------------+ | 2 | +------------------+ 1 row in set (0.00 sec) mysql>