Jim*_*mmy 1 oracle json jsonpath oracle12c
我有一个CLOB列,其中包含以下数据(为了解决此问题而简化)
{
"notUsed": [],
"stock": [
{
"name": "eggs",
"value": "in stock"
},
{
"name": "milk",
"value": "out of stock"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想避免必须选择整个对象并以编程方式解析以获取我想要的数据.理想情况下,我想利用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;
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用Dot Notation,但是还没有找到一个例子,它涵盖了将where子句添加到数组的属性中.
select
myTable.id,
myTable.JSON_COLUMN.stock -- how to get array element here?
from MY_TABLE myTable
where j.id = 46
Run Code Online (Sandbox Code Playgroud)
版:
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"
Run Code Online (Sandbox Code Playgroud)
根据手册,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'
Run Code Online (Sandbox Code Playgroud)
结果:
VALUE
-----
in stock
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |