Тестовый запрос:
select * from testarray(1120,'{"oserial":
["10002695","10002692"],"nserial":[{"serial":"10002693","price":"180.00"},
{"serial":"10002697","price":"180.00"}]}');
CREATE OR REPLACE FUNCTION public.testarray(salesid int,items json)
RETURNS int
LANGUAGE plpgsql
AS $$
declare
resu text;
resu2 text := 'TH';
ssrow RECORD;
oserlen int := 0;
counter int := 0;
begin
select json_array_length(items::json->'oserial') into oserlen;
while counter < oserlen loop
-- if I change 0 to counter, this function does not work
select (items::json#>>'{oserial,0}') into resu;
select * into ssrow
from salesserial
where fk_salesid=salesid
and serialnum=resu::int;
insert into stockloct(serialnum,fk_barcode,source,exflag)
values(ssrow.serialnum,ssrow.fk_barcode,ssrow.fk_salesid,true);
counter := counter + 1;
end loop;
select items::json#>'{nserial,0,serial}' into resu2;
return oserlen;
end;
$$;
Я тестирую функции PostgreSQL.
Эта строка ниже не работает, может кто-нибудь мне помочь. Заранее спасибо. Я использую Postgresql версии 9.5. Если я изменяю переменную 0 на counter в строке json, выбор не возвращает значение. Работает только с числом, а не с переменными.
select (items::json#>>'{oserial,0}') into resu;
-- if i change 0 to counter variable, this select returns null i think as the insert below the line fails;