Oracle 使用 json_query 读取 JSON 数据

Oracle reading JSON data using json_query

在使用 oracle json 数据类型并尝试从中提取数据时,无法从中提取名称和值元素。尝试使用所有已知的符号,但结果为空。

select json_query(po_document, '$.actions.parameters[0]') from j_purchaseorder where ID='2';

您可以使用JSON_VALUE函数如下:

SQL> select JSON_VALUE('{"_class":"123", "name":"tejash","value":"so"}', '$.name') as name,
  2     JSON_VALUE('{"_class":"123", "name":"tejash","value":"so"}', '$.value') as value
  3  from dual;

NAME       VALUE
---------- ----------
tejash     so

SQL>

感谢您的帮助。使用以下

获得所需的输出
    select json_value(json_query(po_document, '$.actions.parameters[0]'),'$.value') from j_purchaseorder where ID='2' and
json_value(json_query(po_document, '$.actions.parameters[0]'),'$.name') = 'SERVERUSER';

如 Oracle 文档中所述,对同一 JSON 文档多次调用 JSON_VALUE() 可能会导致性能非常差。当我们需要从单个文档中提取多个值时,通常最好(为了提高性能)对 JSON_TABLE().

进行一次调用

这是在提供的文档上的工作方式。首先,我创建并填充 table,然后显示查询和输出。请注意 JSON 文档和 SQL SELECT 语句中列(属性)"_class" 的处理。在这两种情况下,名称都必须用双引号引起来,因为它以下划线开头。

create table j_purchaseorder (
    id          number primary key,
    po_document clob   check (po_document is json)
);

insert into j_purchaseorder (id, po_document) values (
2, '{"_class":"hudson.model.StringParameterValue","name":"SERVERUSER","value":"avlipwcnp04"}'
);

commit;

select "_CLASS", name, value
from   j_purchaseorder
       cross apply
       json_table(po_document, '$'
                     columns (
                               "_CLASS" varchar2(40) path '$."_class"',
                               name     varchar2(20) path '$.name',
                               value    varchar2(20) path '$.value'
                             )
                 )
where  id = 2
;

_CLASS                                   NAME               VALUE             
---------------------------------------- ------------------ ------------------
hudson.model.StringParameterValue        SERVERUSER         avlipwcnp04