我有一个CLOB列,包含以下数据(为本问题的目的而简化)
{
"notUsed": [],
"stock": [
{
"name": "eggs",
"value": "in stock"
},
{
"name": "milk",
"value": "out of stock"
}
]
}
我希望避免选择整个对象,并通过编程解析来获取我想要的数据。理想情况下,我想利用Oracle JSON路径特性来完成这个任务。
我想让"value"
,"name" = "eggs"
我试过以下几种方法,但得到了一个[99999][40442] ORA-40442: JSON path expression syntax error
。我已经运行了上面的示例JSON,并通过一个评价者运行了JSON路径,它返回了所需的结果,这使我认为Oracle有它自己的JSONPath整数
SELECT
json_query(
'{"notUsed":[],"stock":[{"name":"eggs","value":"in stock"}, {"name":"milk","value":"out of stock"}]}',
'$.stock[?(@.name=="eggs")]' )
FROM dual;
我也尝试过使用点符号,但是没有找到一个例子,它涵盖了在数组的属性中添加where子句。
select
myTable.id,
myTable.JSON_COLUMN.stock -- how to get array element here?
from MY_TABLE myTable
where j.id = 46
版本:
SELECT * FROM V$VERSION
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
"CORE 12.1.0.2.0 Production"
发布于 2016-09-02 06:42:28
JSON_path_expression只支持一些基本语法,根据手册的说法
JSON_path_expression::=
object_step::=
array_step::=
另一种方法是使用JSON_TABLE将JSON转换为关系表,然后对列进行项目和筛选。
select value
from json_table(
'{
"notUsed": [],
"stock": [
{
"name": "eggs",
"value": "in stock"
},
{
"name": "milk",
"value": "out of stock"
}
]
}',
'$.stock[*]'
columns
(
name varchar2(100 char) path '$.name',
value varchar2(100 char) path '$.value'
)
)
where name = 'eggs'
结果:
VALUE
-----
in stock
https://stackoverflow.com/questions/39283363
复制相似问题