0

私はテーブルを持っています。このテーブルに行を挿入する関数を plpgsql に書きました。

INSERT INTO simpleTalbe (name,money) values('momo',1000) ;

このテーブルにはserialというフィールドがありますid。行を挿入した後の関数で、新しい行が受け取ったIDを知りたいです。

私は使用すると思った:

select nextval('serial');

挿入する前に、より良い解決策はありますか?

4

2 に答える 2

3

RETURNING句を使用します。結果を PL/pgSQL 内のどこかに保存する必要があります - INTO..

INSERT INTO simpleTalbe (name,money) values('momo',1000)
RETURNING id
INTO _my_id_variable;

_my_id_variable一致するデータ型で宣言されている必要があります。

関連している:

何をするつもりかにもよりますが、多くの場合、純粋な SQL によるより良い解決策があります。例:

于 2015-11-20T23:20:35.627 に答える
1

select nextval('serial');あなたが望むことをしません。nextval()実際にシーケンスINSERTをインクリメントしてから、再びインクリメントします。(また、「シリアル」は、列が使用するシーケンスの名前ではありませんserial。)

@Erwin の回答 ( INSERT ... RETURNING) は、この状況のた​​めに特別に構文が導入されたため、最良の回答ですが、次のこともできます。

SELECT currval('simpletalbe_id_seq') INTO ...

その後いつでもINSERT、シーケンスの現在の値を取得できます。(列を補助する自動定義シーケンスのシーケンス名形式tablename _ columnnameserial _seq に注意してください。)

于 2015-11-20T23:31:41.900 に答える