How to select specific element from a JSON array in Oracles JSON CLOB type(如何从Oracle JSON CLOB类型的JSON数组中选择特定元素)
问题描述
我有一个CLOB专栏,其中包含以下数据(为此问题而简化)
{
"notUsed": [],
"stock": [
{
"name": "eggs",
"value": "in stock"
},
{
"name": "milk",
"value": "out of stock"
}
]
}
我希望避免选择整个对象并通过编程进行解析来获得我想要的数据。理想情况下,我希望使用Oracle JSON path功能来完成此操作。
我想获取"value"
,其中"name" = "eggs"
我尝试了以下方法,但得到了[99999][40442] ORA-40442: JSON path expression syntax error
。我通过一个evaluator运行了上面的示例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;
我也尝试过使用Dot Notation,但找不到将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"
推荐答案
JSON_PATH_EXPRESSION仅支持一些基本语法,the manual:
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
这篇关于如何从Oracle JSON CLOB类型的JSON数组中选择特定元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何从Oracle JSON CLOB类型的JSON数组中选择特定元素
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 更改自动增量起始编号? 2021-01-01
- SQL 临时表问题 2022-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01