in SQL Server ich tun, wie folgt:select/Anzeige eingefügt letzte serielle ID in Postgres
insert into foo(name) values('bob')
select @@identity;
so erhalte ich eine Abfrage/Skalar Ergebnis
angezeigt, wie dies mit Postgres?
in SQL Server ich tun, wie folgt:select/Anzeige eingefügt letzte serielle ID in Postgres
insert into foo(name) values('bob')
select @@identity;
so erhalte ich eine Abfrage/Skalar Ergebnis
angezeigt, wie dies mit Postgres?
Es
GET DIAGNOSTICS wäre YourParam = RESULT_OID;
Siehe hier http://www.postgresql.org/docs/8.2/static/plpgsql-statements.html Scrollen Sie bis zu 37.6.6. Abrufen der Ergebnisstatus
Fragesteller edit: ich das versucht:
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;
es immer 0 zurückgibt, wissen Sie, was hier falsch ist?
eine spezifische Sequenz Get:
SELECT currval('name_of_your_sequence');
den letzten Wert aus der letzten Sequenz gewöhnungs:
SELECT lastval();
Überprüfen Sie das Handbuch auch: http://www.postgresql.org/docs/current/static/functions-sequence.html
Edit: Sie könnten auch verwenden RETURNING in Ihrem INSERT:
INSERT INTO foo(id, name) VALUES(DEFAULT, 'bob') RETURNING id;
Ein guter Weg ist mit RETURNING ID. Hier ist ein kurzes Beispiel mit 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
Es funktioniert für mich!
Verwenden Sie nicht "@@ identity" in SQL Server. Die Verwendung von [SCOPE_IDENTITY()] (http://msdn.microsoft.com/en-us/library/ms190315.aspx) ist stattdessen sicherer, um mögliche Probleme mit Triggern zu vermeiden. –