首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据参数中的值列表更新和插入记录

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

Stack Overflow用户
提问于 2019-01-29 13:05:49
回答 1查看 48关注 0票数 1

我正在使用PostgreSQL9.3。

我希望创建一个函数来更新我的表(标志=‘9’),并使用参数中指定的rfidnumber插入新记录(标志=‘0’)。

这个参数可能有几个由空格分隔的值(即。11 22 33 44

代码语言:javascript
复制
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';

当我使用以下方法调用此函数时:

代码语言:javascript
复制
select fcreate_rfid('11 22 33 44');

此函数无法更新旧记录,但成功插入新记录。

帮我解决这个问题。我知道问题是update命令,但我只是不知道如何纠正它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-29 13:35:26

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

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

代码语言:javascript
复制
UPDATE tblrfid SET flag='9' 
WHERE flag='0' AND rfidnumber = ANY (string_to_array(znumber,' '));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54421767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档