2013-08-20 13 views
10

posso tornare id come INSERT risultato, comePgsql. Tornando campo come risultato inserto in funzione

INSERT INTO table(id,field) VALUES($id,$value) RETURNING id; 

Ma non posso restituirlo e assegnare alla variabile nel mio funzione

var = INSERT INTO table(id,field) VALUES($id,$value) RETURNING id; 

o

SELECT INTO var INSERT INTO table(id,field) VALUES($id,$value) RETURNING id; 

non funzionano. Come posso farlo?

risposta

20

Prova questo:

INSERT INTO table(id,field) 
VALUES($id,$value) 
RETURNING id into var; 
+3

Se si utilizza questo in una funzione 'plpgsql', è necessario [dichiarare] (http://www.postgresql.org/docs/9.4/static /plpgsql-declarations.html) la variabile prima. – z0r

+0

Non funziona su psql 9.6 – TangMonk

+0

@Wooden Sei sicuro? Funziona per me con la v9.6. –

4

Si potrebbe anche usare:

var := (INSERT INTO table(id,field) VALUES($id,$value) RETURNING id); 

La leggibilità è ovviamente una preferenza personale, ma mi piace questa sintassi perché mostra un incarico evidente.

+2

quale versione di postgres usi. Ottengo l'errore di sintassi sulla dichiarazione. Preferisco anche quella sintassi. – nXqd

+0

@nXqd: Questo è stato 2 anni fa! Penso che stavo usando PG 9.2.x circa. –

+1

non funziona a 9.6.0 – TangMonk

1

Questa domanda è stata inviata molto tempo fa, ma forse qualcuno ha lo stesso problema in questo momento. se l'id campo è di tipo SERIALE. La mia soluzione è la seguente:

INSERT INTO table(id,field) VALUES($id,$value) RETURNING id; 

SELECT INTO var currval('table_id_seq'); 
Problemi correlati