我有一张桌子。我在plpgsql中编写了一个函数,在该表中插入一行:
INSERT INTO simpleTalbe (name,money) values('momo',1000) ;
此表格中包含名为serial
的{{1}}字段。我想在插入行之后在函数中知道新行接收的id。
我想用:
id
在插入之前,是否有更好的解决方案?
答案 0 :(得分:2)
使用RETURNING
子句。您需要将结果保存在PL / pgSQL内部 - 附加INTO
..
INSERT INTO simpleTalbe (name,money) values('momo',1000)
RETURNING id
INTO _my_id_variable;
必须使用匹配的数据类型声明 _my_id_variable
。
相关:
根据您打算使用它的方式,通常有一个更好的纯SQL解决方案。例子:
答案 1 :(得分:1)
select nextval('serial');
不会做你想做的事; nextval()
实际上会递增序列,然后INSERT
会再次递增。(另外,'serial'是不是序列的名称您的serial
列使用。)
@ Erwin的回答(INSERT ... RETURNING
)是最好的答案,因为语法是专门针对这种情况引入的,但你也可以做一个
SELECT currval('simpletalbe_id_seq') INTO ...
在之后 INSERT
以检索序列的当前值。 (请注意序列名称格式 tablename _ columnname _seq,用于支持serial
列的自动定义序列。)