Обновление и вставка записи на основе списка значений в параметре - PullRequest
0 голосов
/ 29 января 2019

Я использую postgresql 9.3.

Я хочу создать функцию для обновления моей таблицы (flag = '9') и вставки новой записи (flag = '0') с номером rfidnumber, указанным в параметре,

Этот параметр может иметь несколько значений, разделенных пробелом (т. Е. 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 голосов
/ 29 января 2019

Вы не можете сделать это таким образом - znumber - это VARCHAR, а не список элементов.Таким образом, оператор IN здесь бесполезен - у вас есть только 1 элемент в списке, и это целая строка znumber, а не элементы, разделенные пробелом.

Я не уверен, будет ли приведенный ниже кодработать, но это должно дать вам направление для вашего исследования:

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