美文网首页
【postgresql】数据库函数返回字符串问题

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

作者: Yechom | 来源:发表于2021-11-13 22:40 被阅读0次

    数据库函数创建语法

    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 ;
    

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

    相关文章

      网友评论

          本文标题:【postgresql】数据库函数返回字符串问题

          本文链接:https://www.haomeiwen.com/subject/trzzzltx.html