dans le server sql je fais comme ceci:
insert into foo(name) values('bob') select @@identity;
donc j'obtiens une requête / résultat scalaire affiché
comment cela avec postgres?
Obtenez une séquence spécifique:
SELECT currval('name_of_your_sequence');
Récupère la dernière valeur de la dernière séquence utilisée:
SELECT lastval();
Consultez également le manuel: http://www.postgresql.org/docs/current/static/functions-sequence.html
Modifier: Vous pouvez également utiliser RETOUR dans votre INSERT:
INSERT INTO foo(id, name) VALUES(DEFAULT, 'bob') RETURNING id;
Un bon moyen est d'utiliser RETURNING id. Voici un petit exemple utilisant 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
Ça marche pour moi!
Ce serait
GET DIAGNOSTICS YourParam = RESULT_OID;
Voir ici http://www.postgresql.org/docs/8.2/static/plpgsql-statements.html faites défiler jusqu'à 37.6.6. Obtention du statut de résultat
asker edit: J'ai essayé ceci:
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;
il renvoie toujours 0, vous savez ce qui ne va pas ici?