【发布时间】:2020-09-26 21:09:15
【问题描述】:
我正在尝试找到一种方法,通过它们在表中的存在将文本数组拆分为两个数组。
假设users 表有这三个ID:1, 2, 3,我有一个input_array_ids,其值为1, 2, 5。 ID 1, 2 存在于表中,因此它进入另一个名为ids_valid 的数组,ID 5 进入ids_invalid。最后,我想对有效 ID 运行更新,并通知用户哪些 ID 已更新,哪些 ID 在表中找不到。
CREATE FUNCTION update_status(p_id character varying DEFAULT NULL::character varying,
p_status character varying DEFAULT NULL::character varying) RETURNS character varying
LANGUAGE plpgsql
AS
$$
DECLARE
v_valid_ids users.id%type;
v_invalid_ids users.id%type;
v_result varchar(255);
v_ids text[];
BEGIN
v_ids = string_to_array(regexp_replace(p_id, '[\s+]', '', 'g'), ',');
--Do some magic to split v_ids into v_valid_ids and v_invalid_ids
UPDATE users
SET row_status = p_status,
updated_by = 'hxBiSP'
WHERE id = ANY (v_valid_ids);
v_result = 'Updated: ' || string_agg(v_valid_ids::character varying, ', ') || 'Could not update: ' || string_agg(v_invalid_ids::character varying, ', ');
RETURN v_result;
END ;
$$;
ALTER FUNCTION update_status(varchar, varchar) OWNER TO postgres;
我该怎么做?
【问题讨论】:
-
您展示了一个带有
integer数组的示例,但该函数适用于varchar输入、text数组和混淆类型。id的实际数据类型很重要。 (就像你的 Postgres 版本一样,总是这样。)告诉我们更多关于输入的信息:一个文本字符串?具体是什么规格?
标签: sql postgresql sql-update plpgsql sql-function