在PL / pgSQL

时间:2015-11-20 23:16:25

标签: postgresql plpgsql sql-insert sql-returning nextval

我有一张桌子。我在plpgsql中编写了一个函数,在该表中插入一行:

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

此表格中包含名为serial的{​​{1}}字段。我想在插入行之后在函数中知道新行接收的id。

我想用:

id
在插入之前,是否有更好的解决方案?

2 个答案:

答案 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列的自动定义序列。)