首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Postgres:返回json clob

Postgres:返回json clob
EN

Stack Overflow用户
提问于 2016-03-29 19:08:41
回答 1查看 1.1K关注 0票数 0

首先,我在Oracle中有一个返回阻塞的过程。这个clob包含一个json字符串,我用普利森从一个select中创建了这个字符串。如下所示:

代码语言:javascript
运行
复制
procedure xyz
(
    o_json out clob
)
is
    m_json_list json_list := json_list;
    m_json_temp json;
begin
    for cs in (select id, name, birthday from profile)loop
        m_json_temp := json;

        m_json_temp.put('id', cs.id);
        m_json_temp.put('name', cs.name);
        m_json_temp.put('birthday', cs.birthday);

        m_json_list.add(m_json_temp);
    end loop;
    o_json := convertToClob(m_json_list);
end xyz;

现在,我想通过Postgres数据库实现同样的结果。我发现的唯一原因是我有一张有一个cloumn的桌子,它的类型是' json‘,包含了整个json。这不是我要找的。

有人能给我举个例子,说明如何在postgresql中实现这个场景吗?

编辑:这里的是一个内部连接的示例:

代码语言:javascript
运行
复制
procedure xyz
(
    o_json out clob
)
is
    m_json_list json_list := json_list;
    m_json_temp json;
begin
    for cs in (select ppf.id, ppf.name, ppf.birthday, ott.info from profile ppf inner join other_table ott on ott.ott_id = ppf.id )loop
        m_json_temp := json;

        m_json_temp.put('id', cs.id);
        m_json_temp.put('name', cs.name);
        m_json_temp.put('birthday', cs.birthday);
        m_json_temp.put('info', cs.info);

        m_json_list.add(m_json_temp);
    end loop;
    o_json := convertToClob(m_json_list);
end xyz;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-29 20:09:37

因此,您正在寻找一种从查询构造json数组的方法。

给出了一个表和一些测试数据:

代码语言:javascript
运行
复制
postgres=# create table profile(id serial, name text, birthday date);
CREATE TABLE
postgres=# insert into profile(name, birthday) values('John', current_date - interval '30 years');
INSERT 0 1
postgres=# insert into profile(name, birthday) values('Jack', current_date - interval '25 years');
INSERT 0 1

可以将行表示为json对象,如下所示:

代码语言:javascript
运行
复制
postgres=# select row_to_json(p.*) from profile p;
                  row_to_json                   
------------------------------------------------
 {"id":1,"name":"John","birthday":"1986-03-29"}
 {"id":2,"name":"Jack","birthday":"1991-03-29"}
(2 rows)

然后将这些json对象聚合到一个数组中:

代码语言:javascript
运行
复制
postgres=# select json_agg(row_to_json(p.*)) from profile p;
                                             json_agg                                             
--------------------------------------------------------------------------------------------------
 [{"id":1,"name":"John","birthday":"1986-03-29"}, {"id":2,"name":"Jack","birthday":"1991-03-29"}]
(1 row)

更简单的是,您可以只使用聚合,它将为您完成所有的转换:

代码语言:javascript
运行
复制
postgres=# select json_agg(p.*) from profile p;
                     json_agg                      
---------------------------------------------------
 [{"id":1,"name":"John","birthday":"1986-03-29"}, +
  {"id":2,"name":"Jack","birthday":"1991-03-29"}]
(1 row)

(别管+符号了,它不是json的一部分。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36293057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档