Blue Star zei al dat er een ingebouwde functie is om een door komma's gescheiden string om te zetten in een array.
Maar ik zou willen voorstellen om om te beginnen geen door komma's gescheiden tekenreeks door te geven. Als u een variabel aantal ID's wilt doorgeven, gebruikt u een variadic
parameter.
U hoeft ook niet eerst een SELECT uit te voeren, u kunt het systeem vragen hoeveel rijen er zijn bijgewerkt na de UPDATE-instructie.
CREATE FUNCTION update_status(p_status text, p_id variadic integer[])
RETURNS character varying
LANGUAGE plpgsql
AS
$$
DECLARE
v_row_count bigint DEFAULT 0;
BEGIN
UPDATE test
SET status = p_status,
updated_by = 'admin'
WHERE user_id = any (p_id);
get diagnostics v_row_count = row_count;
if v_row_count = 0 then
return 'User not found';
end if;
return concat(v_row_count, ' users updated');
END
$$;
Je kunt het als volgt gebruiken:
select update_status('active', 1);
select update_status('active', 5, 8, 42);
Als je dit om de een of andere reden "moet" doorgeven als een enkel argument, gebruik dan in plaats daarvan een echte array:
CREATE FUNCTION update_status(p_status text, p_id integer[])
Geef het dan als volgt door:
select update_status('active', array[5,8,42]);
of
select update_status('active', '{5,8,42}');