PostgreSQL中如何通过存储过程实现字符串拆分?
你的存储过程问题分析及修正
你的存储过程没法生效,主要有两个核心问题:
- 类型不匹配:
string_to_array()返回的是文本数组(text[]),但你把它赋值给了text类型的变量elems,这会直接触发类型错误,根本跑不起来。 - 没做结果输出处理:就算拆分成功,你也没把拆分后的数组拼成你要的
sneha pai格式,也没设置返回结果的逻辑。
修正后的存储过程
给你调整了代码,新增输出参数,同时把拆分后的数组用空格拼接成目标字符串:
CREATE OR REPLACE PROCEDURE public.splitstringcheck( IN inputstr text, OUT resultstr text) -- 新增输出参数用来返回最终结果 LANGUAGE 'plpgsql' SECURITY DEFINER AS $BODY$ DECLARE delimeter text := '@@@@'; elems text[]; -- 把变量改成数组类型,匹配string_to_array的返回值 BEGIN elems := string_to_array(inputstr, delimeter); -- 将数组元素用空格连接成目标格式 resultstr := array_to_string(elems, ' '); END $BODY$;
调用示例
在psql里这么调用就能拿到结果:
CALL public.splitstringcheck('sneha@@@@pai', resultstr); SELECT resultstr;
更简洁的替代方案:使用函数
如果只是需要转换字符串,用函数比存储过程更方便,不用折腾输出参数:
CREATE OR REPLACE FUNCTION public.splitstringcheck(inputstr text) RETURNS text LANGUAGE 'plpgsql' SECURITY DEFINER AS $BODY$ BEGIN RETURN array_to_string(string_to_array(inputstr, '@@@@'), ' '); END $BODY$;
调用时直接查询即可:
SELECT public.splitstringcheck('sneha@@@@pai'); -- 直接输出:sneha pai
内容的提问来源于stack exchange,提问作者KSMNOP k
相关产品推荐
相关产品推荐

