我正在尝试在 Oracle SQL 中的包内创建包含多个函数的 JSON 文件。我可以在一个选择中创建整个 JSON,但这是一个相当大的选择,因此,我想将所有内容划分为多个函数。
问题是,当尝试组装整个 JSON 时,内部应该有数组并维护 JSON 结构的值却被放置为字符串。
小例子:
"indicadoresOperacao": "[{\"id\":\"11122/2024\",\"indicadorConceitoSincronizado\":\"true\",\"indicadorSincronizarConceito\":\"false\"
这是在这里生成的:
KEY 'indicadoresOperacao' VALUE get_json_indicadores_op_plano( id_pr),
在函数内部,我有一个创建 JSON_ARRAYAGG 的 SELECT,并且返回一个 CLOB。
我尝试的所有不是一起创建整个事物(这需要更多时间)的结果都是相同的格式,我想我知道问题是我试图将 VALUE 与 CLOB 关联,而不是选择它我自己,并且我不知道如何解决它以使代码在需要时易于阅读和更改。
如果您返回 JSON 格式的值,请使用
FORMAT JSON
按原样使用该值:
KEY 'indicadoresOperacao'
VALUE get_json_indicadores_op_plano(id_pr) FORMAT JSON
但是,您可能不需要使用函数。例如,如果您有示例数据:
CREATE TABLE table_name (id, ics, isc) AS
SELECT '11122/2024', 1, 0 FROM DUAL UNION ALL
SELECT '11123/2024', 0, 1 FROM DUAL;
然后您可以使用以下方法将其表示为包含对象数组的对象:
SELECT JSON_OBJECT(
KEY 'indicadoresOperacao' VALUE JSON_ARRAYAGG(
JSON_OBJECT(
KEY 'id' VALUE id,
KEY 'indicadorConceitoSincronizado'
VALUE CASE ics WHEN 1 THEN 'true' ELSE 'false' END FORMAT JSON,
KEY 'indicadorSincronizarConceito'
VALUE CASE isc WHEN 1 THEN 'true' ELSE 'false' END FORMAT JSON
RETURNING CLOB
)
RETURNING CLOB
)
RETURNING CLOB
) AS json
FROM table_name
哪个输出:
JSON |
---|
{"indicadoresOperacao":[{"id":"11122/2024","indicadorConceitoSincronizado":true,"indicadorSincronizarConceito":false},{"id":"11123/2024","indicadorConceitoSincronizado":false,"indicadorSincronizarConceito “:正确}]} |