【发布时间】:2020-08-22 20:52:21
【问题描述】:
您好,我必须从 Oracle 表创建 json 文件。我有以下表格中的数据。
我想要这种格式的数据。
{
"add" :
[
{
"canonicalName" : "Apple Computers",
"synonyms" :
[
"Apple",
"Apple Inc"
]
},
{
"canonicalName" : "Google India",
"synonyms" :
[
"Google"
]
},
{
"canonicalName" : "IBM",
"synonyms" :
[
"IBM Corporation"
]
}
],
"delete" :
[
{
"canonicalName" : "IBM",
"synonyms" :
[
"IBM Corporation"
]
},
{
"canonicalName" : "TCS"
}
],
"update" :
[
{
"canonicalName" : "Infosys",
"synonyms" :
[
"Infosys Tech"
]
},
{
"canonicalName" : "Wipro Tech",
"synonyms" :
[
"Wipro Technology"
]
}
]
}
以下代码运行正常。
with
prep (operation, orgname, fragment) as (
select operation, orgname,
json_object( key 'canonicalName' value orgname,
key 'synonyms'
value nullif(json_arrayagg(synonyms order by synonyms), '[]')
FORMAT JSON ABSENT ON NULL
)
from t
group by orgname, operation
)
select json_objectagg( key operation
value json_arrayagg(fragment order by orgname)
) as json_str
from prep
group by operation;
现在我必须在此表中添加一列。
所以tablename 列包含“ORG”和“ITEM”值。所以我必须创建 2 个文件,一个是 item.json,另一个是 ORG.json,依此类推。
我需要将在 item.json 中具有 ITEM 并且在 ORG.json 中具有 ORG 的数据放入。
我需要在上面的查询中做些什么改变。
甚至 PL/SQL 也可以。您能否建议对上述查询进行更改?
如果我们可以将结果存储到某个数组中并返回调用环境也可以
【问题讨论】:
-
你不只是在你的选择中添加一个 WHERE 条件“WHERE TABLENAME='ITEM',或者 WHERE TABLENAME=
-
实际上 Ed 可以有 n 个条目,例如 ITEM、ORG、FEATURES,所以我一直在寻找完美的答案。我可以创建提供输出但可能不正确的代码。所以我正在为产品创建代码。所以尽我所能编写正确的代码。我其实是一个java开发者。
-
我在逻辑中添加了参数,因此它开始给出与选择查询不匹配的错误。后来它给出了一些奇怪的输出。告诉我一件事不使用光标可以完成吗?
-
您可能在错误的位置添加了
where子句。在我的代码中找到名为prep的子查询(在with子句中)。找到from子句:from t。紧随其后,添加where子句:... from t WHERE tablename = :tablename ...这里:tablename(带有前导冒号)是一个绑定变量;你可以给它像'ITEM'、'ORG'等值。 -
"任意数量的值" ...好吧,我只是以您展示的两个为例。如果您接受我的建议来编写查询,以便从调用者提供参数,那么它将适用于您提供的任何值。