PostgreSQL函数:获取更新或插入行的ID

SlimenTN

我的PostgreSQL数据库中有此功能,如果存在,则更新行;如果不存在,则插入新行:

CREATE OR REPLACE FUNCTION insert_or_update(val1 integer, val2 integer) RETURNS VOID AS $$ 
DECLARE 
BEGIN 
    UPDATE my_table SET col2 = val2 WHERE col1 = val1; 
    IF NOT FOUND THEN 
    INSERT INTO my_table (col2) values ( val2 ); 
    END IF; 
END; 
$$ LANGUAGE 'plpgsql';

目前,它工作正常,但是如果要id更新或插入,我希望获得该行的信息。
我该怎么做?

a_horse_with_no_name

您的函数声明为,returns void因此它无法返回任何内容。

假设col1它是主键,并且也定义为串行键,则可以执行以下操作:

CREATE OR REPLACE FUNCTION insert_or_update(val1 integer, val2 integer) 
    RETURNS int 
AS $$ 
DECLARE 
  l_id integer;
BEGIN 
    l_id := val1; -- initialize the local variable.

    UPDATE my_table 
       SET col2 = val2 
    WHERE col1 = val1; -- !! IMPORTANT: this assumes col1 is unique !!

    IF NOT FOUND THEN 
       INSERT INTO my_table (col2) values ( val2 ) 
       RETURNING col1 -- this makes the generated value available
       into l_id;     -- and this stores it in the local variable
    END IF; 

    return l_id; -- return whichever was used.
END; 
$$ LANGUAGE plpgsql;

与您的功能相比,我做了四件事:

  1. 该函数声明为returns integer为了能够返回某些内容
  2. 您需要一个变量,您可以在其中存储insert语句的返回值
  3. 最后需要返回生成的值:
  4. 语言名称是一个标识符,因此不能使用单引号将其引起来。

如果要区分调用方的更新还是插入,可以将l_id初始化为null在这种情况下,null如果发生更新,该函数将返回,否则返回某个值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PostgreSQL函数:获取更新或插入的行的ID

来自分类Dev

获取插入行的ID

来自分类Dev

获取插入行的ID

来自分类Dev

插入行并获取生成的ID

来自分类Dev

获取最后插入行的 id

来自分类Dev

postgresql:更新最新插入行的快速方法

来自分类Dev

postgresql:更新最新插入行的快速方法

来自分类Dev

插入行后从游标获取生成的ID

来自分类Dev

如何从PDO获取最后插入的插入行ID

来自分类Dev

获取插入行的行号

来自分类Dev

获取插入行的PID

来自分类Dev

获取Postgresql的最后插入ID

来自分类Dev

获取插入行的字段值

来自分类Dev

获取插入行的日期MySQL

来自分类Dev

获取插入行的字段值

来自分类Dev

获取最后的插入行 mysql

来自分类Dev

如何在postgreSQL pgAdmin中插入行?

来自分类Dev

PostgreSQL触发器以插入行

来自分类Dev

插入重复更新,获取“新”生成的ID

来自分类Dev

防止在插入行时更新公式引用

来自分类Dev

插入行时UDF不更新

来自分类Dev

插入行时更新不同的表

来自分类Dev

Laravel-多插入行并检索ID

来自分类Dev

返回插入行的ID(自动递增)

来自分类Dev

如果找不到ID,如何插入行?

来自分类Dev

PostgreSQL插入或更新触发函数易失性类别

来自分类Dev

PostgreSQL在CONFLICT更新上使用插入以获取流否

来自分类Dev

我们能否插入一张表并通过查看另一张表的值作为插入的ID来触发更新插入行的一列?

来自分类Dev

如何使用嵌套 SELECT 获取 INSERT 查询的插入行数?没有受影响的行,结果 ID,数量行