首页 > 解决方案 > JSON 值 - Oracle PL/SQL:多个字段

问题描述

我有一个带有以下示例条目的 HCLOB

"relist":[{"name":"XYZ","action":["Manager","Specific User List"],"flag":false}]

当我尝试使用 JSON_VALUE 获取名称或标志时,我能够获取它,因为它具有单个字段,但我想获取操作的值。我读到 JSON_VALUE 只支持 1 个条目。

是否有任何解决方法可以同时获得行动价值?

问候。

标签: sqlarraysoraclejson-value

解决方案


JSON_TABLE与嵌套路径一起使用:

SELECT j.*
FROM   table_name t
       CROSS APPLY JSON_TABLE(
         t.data,
         '$.relist[*]'
         COLUMNS (
           name VARCHAR2(20) PATH '$.name',
           flag VARCHAR2(5)  PATH '$.flag',
           NESTED PATH '$.action[*]' COLUMNS(
             action VARCHAR2(20) PATH '$'
           )
         )
       ) j

其中,对于样本数据:

CREATE TABLE table_name ( data CLOB CHECK ( data IS JSON ) );

INSERT INTO table_name ( data ) VALUES (
  '{"relist":[{"name":"XYZ","action":["Manager","Specific User List"],"flag":false}]}'
);

输出:

姓名 | 旗帜 | 行动            
:--- | :---- | :-----------------
XYZ | 假 | 经理           
XYZ | 假 | 特定用户列表

或者使用数组的索引来获取操作:

SELECT j.*
FROM   table_name t
       CROSS APPLY JSON_TABLE(
         t.data,
         '$.relist[*]'
         COLUMNS (
           name    VARCHAR2(20) PATH '$.name',
           flag    VARCHAR2(5)  PATH '$.flag',
           action1 VARCHAR2(20) PATH '$.action[0]',
           action2 VARCHAR2(20) PATH '$.action[1]'
         )
       ) j

哪个输出:

姓名 | 旗帜 | 行动1 | 行动2           
:--- | :---- | :-------- | :-----------------
XYZ | 假 | 经理 | 特定用户列表

db<>在这里摆弄


推荐阅读