下面函数为根据入参查询符合的数据
- regexp_split_to_array 是将分隔的数据转成数组
- string_to_array 将字符串转换成数组
- 从逻辑上看,in和any的用法一样。但是any取的是一个set,括号里是数组(必须是实际的数组类型);in取的是一个集合,是逗号分隔的值列表。
例如:
SELECT ‘1’ = ANY (ARRAY[‘1’, ‘2’]) ;
SELECT ‘1’ in (‘1’,‘2’) ;
CREATE OR REPLACE FUNCTION fun_parse_param(p_classid text, p_paramno text)
RETURNS text
LANGUAGE sql
AS $function$
SELECT string_agg(FPARAMVALUE,',')
FROM T_SYSTEMCONFIG
WHERE FCLASSID = $1
AND FPARAMNO = any(regexp_split_to_array($2, ','));
$function$;
方法二:
CREATE OR REPLACE FUNCTION fun_parse_param(
p_classid text,
p_paramno text)
RETURNS text
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
AS $BODY$
DECLARE
V_PARAMVALUE text;
sqlstring text;
BEGIN
sqlstring:= 'SELECT string_agg(FPARAMVALUE,'','')
FROM T_SYSTEMCONFIG
WHERE FCLASSID = '''||p_classid||'''
AND FPARAMNO = any(regexp_split_to_array('''||p_paramno||''', '',''));';
EXECUTE sqlstring into V_PARAMVALUE;
RETURN V_PARAMVALUE;
END;
$BODY$;
--方法三:
CREATE OR REPLACE FUNCTION fun_parse_param(
p_classid text,
p_paramno text)
RETURNS text
LANGUAGE 'plpgsql'
as $BODY$
DECLARE
V_PARAMVALUE text;
BEGIN
SELECT string_agg(FPARAMVALUE,',')
into STRICT V_PARAMVALUE
FROM T_SYSTEMCONFIG
WHERE FCLASSID = P_CLASSID
AND FPARAMNO = any(string_to_array(p_paramno,','));
return V_PARAMVALUE;
END;
$BODY$