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
在使用 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