Thread: How do I get the rec-id from an insert.

How do I get the rec-id from an insert.

From
Chris Ruprecht
Date:
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

Re: How do I get the rec-id from an insert.

From
Clinton Adams
Date:
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


Re: How do I get the rec-id from an insert.

From
Bruno Wolff III
Date:
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.

Re: How do I get the rec-id from an insert.

From
Clinton Adams
Date:
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.