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

时间:2019-01-29 13:05:49

标签: 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');

此功能无法更新旧记录,但可以成功插入新记录。

帮助我解决此问题。我知道问题是更新命令,但我不知道要纠正它。

1 个答案:

答案 0 :(得分:0)

您不能以这种方式进行操作-znumber是VARCHAR,而不是元素列表。因此IN运算符在这里没有用-列表中只有1个元素,它是整个字符串znumber,而不是用空格分隔的元素。

我不确定下面的代码是否会起作用,但是它应该为您的研究提供一些指导:

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