2013-08-20 21 views
10

我可以返回ID作爲INSERT結果,像Pgsql。返回字段插入導致功能

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

但我不能歸還,並分配給可變進我的函數

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

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

不起作用。 我該怎麼做?

回答

20

試試這個:

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

如果你在一個'plpgsql'功能使用這一點,你需要[聲明](http://www.postgresql.org/docs/9.4/static /plpgsql-declarations.html)變量首先。 – z0r

+0

不適用於psql 9.6 – TangMonk

+0

@Wooden您確定嗎?適用於v9.6的我。 –

4

您還可以使用:

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

可讀性當然是個人喜好,但我喜歡這種語法,因爲它呈現出明顯的分配。

+2

你使用的是什麼版本的postgres。我在語句中出現語法錯誤。我也更喜歡這種語法。 – nXqd

+0

@nXqd:那是2年前!我想我使用的是PG 9.2.x左右。 –

+1

不適用於9.6.0 – TangMonk

1

這個問題很早以前就發佈過了,但也許有人在這一刻有同樣的問題。 如果您的字段ID是SERIAL類型的。 我的解決辦法是下一個:

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

SELECT INTO var currval('table_id_seq');