数据库函数创建语法
CREATE OR REPLACE FUNCTION "public"."getdata"("parentid" varchar)
RETURNS SETOF "pg_catalog"."varchar" AS $BODY$
BEGIN
RETURN query
....
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000
数据库返回值类型有
(1)"pg_catalog"."varchar" 字符串
(2)"pg_catalog"."bool" 布尔值
(3)"pg_catalog"."int" 数值
(4)"public"."table" 表
问题描述
现有一个pgsql递归查询,递归查询父级节点并拼接成字符串,查询语句如下
with RECURSIVE t as
(select *
from city where id = '3'
union all select city .*
from city ,t
where t.parent_id=city.id )
select string_agg(name, '/')
from city ;
查询结果为
安徽/合肥/庐江县
将该查询语句放在函数中,运行没问题,但是使用函数查询时报错,报错如下:
image.png
原因分析
类型转换问题,需要强制将返回结果转为字符串类型 varchar
解决
将查询修改为
with RECURSIVE t as
(select *
from city where id = '3'
union all select city .*
from city ,t
where t.parent_id=city.id )
select string_agg(name, '/') :: varchar(255)
from city ;
将上传查询放到函数中,可以正常查询。
网友评论