Blue Starは、コンマ区切りの文字列を配列に変換する組み込み関数があることをすでに述べています。
ただし、最初にコンマ区切りの文字列を渡さないことをお勧めします。可変数のIDを渡す場合は、variadic
を使用します パラメータ。
また、最初にSELECTを実行する必要はありません。UPDATEステートメントの後に更新された行数をシステムに問い合わせることができます。
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
$$;
次のように使用できます:
select update_status('active', 1);
select update_status('active', 5, 8, 42);
何らかの理由でこれを単一の引数として渡す必要がある場合は、代わりに実際の配列を使用してください。
CREATE FUNCTION update_status(p_status text, p_id integer[])
次に、次のように渡します:
select update_status('active', array[5,8,42]);
または
select update_status('active', '{5,8,42}');