【postgresql】数据库函数返回字符串问题

2021-11-13  本文已影响0人  Yechom

数据库函数创建语法

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 ;

将上传查询放到函数中,可以正常查询。

上一篇下一篇

猜你喜欢

热点阅读