in sql server I do like this:
insert into foo(name) values(\'bob\')
select @@identity;
so I get a query/scalar result displayed
how to
Get a specific sequence:
SELECT currval('name_of_your_sequence');
Get the last value from the last sequence used:
SELECT lastval();
Check the manual as well: http://www.postgresql.org/docs/current/static/functions-sequence.html
Edit: You could also use RETURNING in your INSERT:
INSERT INTO foo(id, name) VALUES(DEFAULT, 'bob') RETURNING id;
It would be
GET DIAGNOSTICS YourParam = RESULT_OID;
See here http://www.postgresql.org/docs/8.2/static/plpgsql-statements.html scroll down to 37.6.6. Obtaining the Result Status
asker edit: I tried this:
create or replace function aaa() returns int as $$
declare
a int;
begin
insert into oameni values(default, 'aaa');
get diagnostics a = result_oid;
return a;
end;
$$ language plpgsql;
it always returns 0, you know what's wrong here?
A good way is using RETURNING id. Here is a short example using PL/pgSQL:
DECLARE
nivel1 RECORD;
resultId BIGINT;
BEGIN
FOR nivel1 IN SELECT * FROM primary_table LOOP
INSERT INTO second_table(id, field2, field3) VALUES (DEFAULT, "value2", "value3") RETURNING id INTO resultId;
RAISE NOTICE 'Inserted id: %s', quote_literal(resultId);
END LOOP;
RETURN;
END
It works for me!