Blue Star đã đề cập rằng có một chức năng tích hợp để chuyển đổi một chuỗi được phân tách bằng dấu phẩy thành một mảng.
Nhưng tôi khuyên bạn không nên chuyển một chuỗi được phân tách bằng dấu phẩy để bắt đầu. Nếu bạn muốn chuyển một số ID thay đổi, hãy sử dụng variadic
tham số.
Trước tiên, bạn cũng không cần chạy SELECT, bạn có thể hỏi hệ thống có bao nhiêu hàng được cập nhật sau câu lệnh 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
$$;
Bạn có thể sử dụng nó như thế này:
select update_status('active', 1);
select update_status('active', 5, 8, 42);
Nếu vì lý do nào đó, bạn "phải" chuyển nó dưới dạng một đối số, hãy sử dụng một mảng thực để thay thế:
CREATE FUNCTION update_status(p_status text, p_id integer[])
Sau đó chuyển nó như thế này:
select update_status('active', array[5,8,42]);
hoặc
select update_status('active', '{5,8,42}');