【问题标题】:Get default serial value after INSERT inside PL/pgSQL在 PL/pgSQL 中插入后获取默认序列值
【发布时间】:2015-11-20 23:16:24
【问题描述】:

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

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

此表有 serial 字段,名为 id。我想在插入行后的函数中知道新行收到的 id。

我想用:

select nextval('serial');

在插入之前,有没有更好的解决方案?

【问题讨论】:

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


【解决方案1】:

使用RETURNING 子句。您需要将结果保存在 PL/pgSQL 中的某处 - 并附加 INTO ..

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

_my_id_variable 必须使用匹配的数据类型声明。

相关:

根据您打算用它做什么,通常使用纯 SQL 会有更好的解决方案。例子:

【讨论】:

    【解决方案2】:

    select nextval('serial'); 不会做你想做的事; nextval() 实际上会增加序列,然后INSERT再次增加它。(另外,'serial' 不是您的serial 序列的名称列使用。)

    @Erwin 的答案 (INSERT ... RETURNING) 是最好的答案,因为专门针对这种情况引入了语法,但您也可以这样做

    SELECT currval('simpletalbe_id_seq') INTO ...
    

    任何时间之后你的INSERT 来检索序列的当前值。 (注意支持serial 列的自动定义序列的序列名称格式tablename_columnname_seq。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      相关资源
      最近更新 更多