2010-09-10 12 views
6

in SQL Server che faccio in questo modo:selezionare/display ultimo inserito id seriale in Postgres

insert into foo(name) values('bob') 
select @@identity; 

in modo da ottenere un risultato di query/scalare visualizzata

come questo con postgres?

+3

Non utilizzare '@@ identity' in SQL Server. L'utilizzo di [SCOPE_IDENTITY()] (http://msdn.microsoft.com/en-us/library/ms190315.aspx) è invece più sicuro per evitare potenziali problemi con i trigger. –

risposta

2

Sarebbe

DIAGNOSTICA GET YourParam = RESULT_OID;

Vedere qui http://www.postgresql.org/docs/8.2/static/plpgsql-statements.html scorrere verso il basso fino a 37.6.6. La concessione dello status Risultato

richiedente edit: ho provato questo:

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; 

restituisce sempre 0, si sa che cosa c'è che non va qui?

+0

sì e voglio che venga visualizzato immediatamente, equivalente per selezionare @@ identity – Omu

+0

quindi scaricare in variabile e fare variabile SELECT – SQLMenace

+0

Ho modificato la risposta, potresti dare un'occhiata – Omu

22

Prendi una sequenza specifica:

SELECT currval('name_of_your_sequence'); 

Prendi l'ultimo valore dall'ultima sequenza utilizzata:

SELECT lastval(); 

controllare il manuale così: http://www.postgresql.org/docs/current/static/functions-sequence.html

Edit: Si potrebbe anche usare RITORNARE nel tuo INSERT:

INSERT INTO foo(id, name) VALUES(DEFAULT, 'bob') RETURNING id; 
3

Un buon modo è usare l'ID RESTITUZIONE. Ecco un breve esempio di 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 

Funziona per me!

Problemi correlati