2013-08-20 4 views
10

インサート結果としてフィールドを返す私はPgsql。機能

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

のように、INSERT結果として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; 
を割り当てることはできません

は機能しません。 どうすればいいですか?

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

可読性はもちろん個人的な好みですが、それは明白な割り当てを示しているので、私はこの構文を好き:

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

答えて

20

これを試してみてください。

+3

あなたは 'plpgsql'機能でこれを使用している場合は、[宣言](http://www.postgresql.org/docs/9.4/staticする必要があります/plpgsql-declarations.html)を最初に使用します。 – z0r

+0

psqlで動作しません9.6 – TangMonk

+0

@Wooden本当ですか? v9.6で私のために働く。 –

4

はまた、使用することができます

+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');