私はテーブルを持っています。このテーブルに行を挿入する関数を plpgsql に書きました。
INSERT INTO simpleTalbe (name,money) values('momo',1000) ;
このテーブルにはserial
というフィールドがありますid
。行を挿入した後の関数で、新しい行が受け取ったIDを知りたいです。
私は使用すると思った:
select nextval('serial');
挿入する前に、より良い解決策はありますか?
私はテーブルを持っています。このテーブルに行を挿入する関数を plpgsql に書きました。
INSERT INTO simpleTalbe (name,money) values('momo',1000) ;
このテーブルにはserial
というフィールドがありますid
。行を挿入した後の関数で、新しい行が受け取ったIDを知りたいです。
私は使用すると思った:
select nextval('serial');
挿入する前に、より良い解決策はありますか?
RETURNING
句を使用します。結果を PL/pgSQL 内のどこかに保存する必要があります - INTO
..
INSERT INTO simpleTalbe (name,money) values('momo',1000)
RETURNING id
INTO _my_id_variable;
_my_id_variable
一致するデータ型で宣言されている必要があります。
関連している:
何をするつもりかにもよりますが、多くの場合、純粋な SQL によるより良い解決策があります。例:
select nextval('serial');
あなたが望むことをしません。nextval()
実際にシーケンスINSERT
をインクリメントしてから、再びインクリメントします。(また、「シリアル」は、列が使用するシーケンスの名前ではありませんserial
。)
@Erwin の回答 ( INSERT ... RETURNING
) は、この状況のために特別に構文が導入されたため、最良の回答ですが、次のこともできます。
SELECT currval('simpletalbe_id_seq') INTO ...
その後いつでもINSERT
、シーケンスの現在の値を取得できます。(列を補助する自動定義シーケンスのシーケンス名形式tablename _ columnnameserial
_seq に注意してください。)