Informix: How To Get An Id Of The Last Inserted Record
Solution 1:
The value of the last SERIAL insert is stored in the SQLCA record, as the second entry in the sqlerrd array. Brian's answer is correct for ESQL/C, but you haven't mentioned what language you're using.
If you're writing a stored procedure, the value can be found thus:
LETnew_id= DBINFO('sqlca.sqlerrd1');
It can also be found in $sth->{ix_sqlerrd}[1] if using DBI
There are variants for other languages/interfaces, but I'm sure you'll get the idea.
Solution 2:
I have seen this used.
if LOCAL_SQLCA^.sqlcode =0then/* return serial */Result := LOCAL_SQLCA^.sqlerrd[1]
else/* return error code */Result :=-(Abs(LOCAL_SQLCA^.sqlcode));
Solution 3:
I don't think "efficient" is the word you're looking for here. It's more of a question of accuracy. I'm not sure I can do a better job of explaining it than the SQL Books Online can, but generally, unless you really know what you're doing and have a specific reason for using @@IDENTITY, use SCOPE_IDENTITY. The most obvious reason for this is that @@IDENTITY will not return the identity of the latest record added by your program/sp/etc if there is a trigger attached to the table. Also, there could be issues in high volume applications where two transactions occur at the same time and the following would occur...
- Your insert
- Other user's insert
- Return other user's identity to you
Solution 4:
The OP did not specify which version of Informix is being used, so there can be different answers
Post a Comment for "Informix: How To Get An Id Of The Last Inserted Record"