postgresql - 根据参数中的值列表更新和插入记录

标签 postgresql postgresql-9.3

我正在使用 postgresql 9.3。

我想创建一个函数来更新我的表 (flag='9') 并使用参数中指定的 rfidnumber 插入新记录 (flag='0')。

此参数可能有多个值,以空格分隔(即 11 22 33 44)

CREATE OR REPLACE FUNCTION public.fcreate_rfid (
  znumber varchar
)
RETURNS boolean AS
$body$
BEGIN
    --update old record which has the same rfid number and flag='9' if exists
    update tblrfid set flag='9' where flag='0' and rfidnumber in (znumber);

    -- generate new record
    insert into tblrfid(tanggal, flag, rfidnumber)
    select localtimestamp, '0', regexp_split_to_table(znumber, ' ');

     return true;
END;
$body$
LANGUAGE 'plpgsql';

当我调用这个函数时:

select fcreate_rfid('11 22 33 44');

该函数更新旧记录失败,插入新记录成功。

帮我解决这个问题。我知道问题出在更新命令上,但我只是不知道如何更正它。

最佳答案

您不能这样做 - znumber 是 VARCHAR,而不是元素列表。所以 IN 运算符在这里没有用 - 列表中只有 1 个元素,它是整个字符串 znumber,而不是其以空格分隔的元素。

我不确定下面的代码是否有效,但它应该为您的研究提供一些方向:

UPDATE tblrfid SET flag='9' 
WHERE flag='0' AND rfidnumber = ANY (string_to_array(znumber,' '));

关于postgresql - 根据参数中的值列表更新和插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54421767/

相关文章:

mysql - Heroku 为什么使用 Postgresql?

c# - Postgresql 9.3 json 功能在 npgsql 中的支持

java - 无法从 Postgres 9.3.1 的 bytea 列创建图像

c# - 当前上下文中不存在名称 'f_name'

Python Pyscopg : How do I use place holders with LIMIT/OFFSET and WHERE?

java - PostgreSQL:BYTEA vs OID+大对象?

sql - Postgresql权限不断失败

ruby-on-rails - 获取一个类别中所有帖子的最后评论

postgresql - 致命 : password authentication when bucardo add tables

mysql - name_scope 的 PGError 语法问题