Sequence value

Started by Esa Pikkarainenover 25 years ago6 messagesgeneral
Jump to latest
#1Esa Pikkarainen
epikkara@ktk.oulu.fi

So, I want to insert new record and get immediately its sequence
value (serial column) (or OID). I Use iHTML web interface.
Now I have found out that I can give two queries in iHTML like this:

SQL ="SELECT nextval('koe_pkey_id') as val;
INSERT INTO koe (id, name) values (val, 'uusi');"

Now there are some problems. The previous example causes an error:
ERROR: Attribute 'val' not found
Is there a method how to transmit a value from one query to another?

If I try the examples of FAQ:
SQL ="$newSerialID = nextval('koe_pkey_id');
INSERT INTO koe (id, name) values ($newSerialID, 'uusi');"
Or
SQL ="INSERT INTO koe (name) values ('uusi');"
$newSerialID = curr('koe_pkey_id');

I get: ERROR: parser: parse error at or near "$"

And lately (this may be an iHTML problem) if I try:
SQL ="INSERT INTO koe (name) values ('uusi');
SELECT currval('koe_pkey_id') as val;"
It causes no error, but I cannot retrieve the value because the
queries seem not return any recordsets (nothig can be fetched).

Any hints are valuable!
Thanks
Esa Pikkarainen

#2Roger Wernersson
rw@mindark.com
In reply to: Esa Pikkarainen (#1)
Re: Sequence value

You could try

INSERT INTO koe (id, name) SELECT nextval('koe_pkey_id'), 'uusi';

or something like that.

/Roger

Esa Pikkarainen wrote:

Show quoted text

So, I want to insert new record and get immediately its sequence
value (serial column) (or OID). I Use iHTML web interface.
Now I have found out that I can give two queries in iHTML like this:

SQL ="SELECT nextval('koe_pkey_id') as val;
INSERT INTO koe (id, name) values (val, 'uusi');"

Now there are some problems. The previous example causes an error:
ERROR: Attribute 'val' not found
Is there a method how to transmit a value from one query to another?

If I try the examples of FAQ:
SQL ="$newSerialID = nextval('koe_pkey_id');
INSERT INTO koe (id, name) values ($newSerialID, 'uusi');"
Or
SQL ="INSERT INTO koe (name) values ('uusi');"
$newSerialID = curr('koe_pkey_id');

I get: ERROR: parser: parse error at or near "$"

And lately (this may be an iHTML problem) if I try:
SQL ="INSERT INTO koe (name) values ('uusi');
SELECT currval('koe_pkey_id') as val;"
It causes no error, but I cannot retrieve the value because the
queries seem not return any recordsets (nothig can be fetched).

Any hints are valuable!
Thanks
Esa Pikkarainen

#3Alessio Bragadini
alessio@albourne.com
In reply to: Esa Pikkarainen (#1)
Re: Sequence value

Esa Pikkarainen wrote:

SQL ="SELECT nextval('koe_pkey_id') as val;
INSERT INTO koe (id, name) values (val, 'uusi');"

INSERT INTO koe (id, name) (SELECT nextval('koe_pkey_id'), 'uusi');

--
Alessio F. Bragadini alessio@albourne.com
APL Financial Services http://village.albourne.com
Nicosia, Cyprus phone: +357-2-755750

"It is more complicated than you think"
-- The Eighth Networking Truth from RFC 1925

#4Esa Pikkarainen
epikkara@ktk.oulu.fi
In reply to: Alessio Bragadini (#3)
Re: Sequence value

Thank you,
Yet another way to do it ;-)
but unfortunately it did not solve my problem. Now I have no access
to the value of nextval('koe_pkey_id'). This query does not return
any recordset.
Is it possible to embed Insert query as a subquery into a Select
query? I have not managed to dot it. I mean something like:

SELECT nextval('koe_pkey_id') as val, (INSERT INTO koe (id, name)
values (val, 'uusi')) as dummy FROM koe;"

That would both insert new record and return serial value - if it
just worked...

Thanks
Esa

Alessio Bragadini wrote (15 Dec 00,):

Show quoted text

Esa Pikkarainen wrote:

SQL ="SELECT nextval('koe_pkey_id') as val;
INSERT INTO koe (id, name) values (val, 'uusi');"

INSERT INTO koe (id, name) (SELECT nextval('koe_pkey_id'), 'uusi');

#5Alessio Bragadini
alessio@albourne.com
In reply to: Esa Pikkarainen (#4)
Re: Sequence value

Esa Pikkarainen wrote:

but unfortunately it did not solve my problem. Now I have no access
to the value of nextval('koe_pkey_id'). This query does not return
any recordset.

Sorry, I didn't check this requirement.

Is it possible to embed Insert query as a subquery into a Select
query? I have not managed to dot it. I mean something like:

SELECT nextval('koe_pkey_id') as val, (INSERT INTO koe (id, name)
values (val, 'uusi')) as dummy FROM koe;"

I don't think so.

That would both insert new record and return serial value - if it
just worked...

In one of your examples you used a double statement, so you could
probably try:

INSERT INTO koe (id, name) (SELECT nextval('koe_pkey_id'), 'uusi');
SELECT currval('koe_pkey_id');

This should INSERT and then retrieve the same sequence value. As has
been explained to me before :-) the sequence value is safe (i.e. doesn't
get updated by another connection) inside the connection. One of your
examples was similar, but without the nextval part, so probably the
backend doesn't have a value for currval yet.

--
Alessio F. Bragadini alessio@albourne.com
APL Financial Services http://village.albourne.com
Nicosia, Cyprus phone: +357-2-755750

"It is more complicated than you think"
-- The Eighth Networking Truth from RFC 1925

#6Esa Pikkarainen
epikkara@ktk.oulu.fi
In reply to: Alessio Bragadini (#5)
Re: Sequence value (Record Id)

AAAHHH, I DID IT!!!!

That:
SQL="SELECT nextval('koe_pkey_id');
INSERT INTO koe (id, name) VALUES
(SELECT currval('koe_pkey_id'), 'uusi');"

Now it returns the correct Serial value of the record it inserts.

Yee, I'm glad now
:-D

Thank you all and have a good weekend!
Esa Pikkarainen