Thread: How do I get the rec-id from an insert.
Hi all, I have 3 tables: a: a.recid a.name b: b.recid b.address b.city c: c.recid c.arecid c.brecid each has a default sequence on their respective recid - which is the primary index. when I do an "insert into a ...", it automagically assigns recid a new, unique value, same goes for b. But to create c, I need to know the recid from a and b, so I can connect the two. Is there any way to get the recid from a and b after they have been inserted like in "insert into a ... and give me the recid you're going to use, back"? I know, I can do a "netxval('...')" stuff and then insert the records with values in recid, but that requires two extra calls to the DB per transaction. Best regards, Chris -- Chris Ruprecht Network Grunt and bitpusher extraordinaire
Chris - You don't really need to know the key values - make it one query: insert into c values (nextval('crecid'), currval('arecid'), currval('brecid')) On Tue August 27 2002 21:40, Chris Ruprecht graced us with the following - > Hi all, > > I have 3 tables: > > a: > a.recid > a.name > > b: > b.recid > b.address > b.city > > c: > c.recid > c.arecid > c.brecid > > > each has a default sequence on their respective recid - which is the > primary index. > > when I do an "insert into a ...", it automagically assigns recid a new, > unique value, same goes for b. > > But to create c, I need to know the recid from a and b, so I can connect > the two. > Is there any way to get the recid from a and b after they have been > inserted like in "insert into a ... and give me the recid you're going to > use, back"? > > I know, I can do a "netxval('...')" stuff and then insert the records with > values in recid, but that requires two extra calls to the DB per > transaction. > > Best regards, > Chris
On Thu, Aug 29, 2002 at 15:00:15 -0600, Clinton Adams <clinton@vote-smart.org> wrote: > Chris - > > You don't really need to know the key values - make it one query: > > insert into c values (nextval('crecid'), currval('arecid'), currval('brecid')) Is it documented that the above is reliable? I don't remember ever reading that expressions are evaluated in the order they appear in a select statement.
Bruno - Three sequences are involved in the INSERT. If one sequence were involved, then the expressions would be evaluated left to right, at least from what I can tell through my tests. Not something I would ever use...or rely on, for that matter. On Thu August 29 2002 16:58, Bruno Wolff III graced us with the following - > > insert into c values (nextval('crecid'), currval('arecid'), > > currval('brecid')) > > Is it documented that the above is reliable? I don't remember ever reading > that expressions are evaluated in the order they appear in a select > statement.