从 sqlplus 输出 json。格式化它,使其出现在一行上
Posted
技术标签:
【中文标题】从 sqlplus 输出 json。格式化它,使其出现在一行上【英文标题】:Output json from sqlplus. Format it so that it appears on one line 【发布时间】:2020-10-20 01:35:33 【问题描述】:我们正在使用以下代码:
SELECT json_object('time' VALUE localtimestamp,'db_schema' VALUE 'USER1', status VALUE COUNT(1) FORMAT JSON) FROM <TABLE> GROUP BY status;
但是我们得到如下两行的输出:
JSON_OBJECT('TIME'VALUELOCALTIMESTAMP,'DB_SCHEMA'VALUE'USER1',STATUSVALUECOU
--------------------------------------------------------------------------------
"time":"2019-10-16T12:14:40.540181","db_schema":"USER1","SUBMITTED":123
"time":"2019-10-16T12:14:40.540181","db_chema":"USER1","RUNNING":456
实际上,我们希望输出格式如下:
"time":"2019-10-16T11:41:38.393816","db_schema":"USER1", ["submitted":123, "running":456]
所以,如您所见,我们希望将提交的值和运行的值放在一行中^^
我尝试过使用 sqlplus concat 功能 '||'但它似乎不适用于 json 输出。
在我继续努力的同时,有没有人可以举例说明类似的功能是如何工作的,或者可以通过任何其他方式来实现这一目标?
谢谢。
【问题讨论】:
【参考方案1】:如果您希望它在一行中,也许您的意图是让结果成为单个 JSON 文档,在这种情况下,您应该研究 JSON_ARRAYAGG 之类的内容。
【讨论】:
【参考方案2】:这是我所知道的……
SELECT json_object('time' VALUE localtimestamp,'db_schema' VALUE 'USER1'),
json_objectagg(STATUS value count(JOB_ID) returning varchar2(32000))
FROM <TABLE> GROUP BY status;
^这很有效,就在单行上显示输出而言,但它并不像预期的那样全部在一个对象中。您需要 'returning varchar2(32000)' 来避免 18c 以下版本中的字符最大错误。
【讨论】:
以上是关于从 sqlplus 输出 json。格式化它,使其出现在一行上的主要内容,如果未能解决你的问题,请参考以下文章