Oracle JSON 函数详解与实战

Oracle 数据库提供了丰富的 JSON 函数集,使得开发者可以高效地处理 JSON 数据。本文将详细介绍这些函数,包括它们的语法、使用场景、具体示例,以及在实际项目中的应用。

文章目录

      • JSON_VALUE
        • 语法
        • 参数说明
        • 示例
      • JSON_QUERY
        • 语法
        • 示例
      • JSON_TABLE
        • 语法
        • 示例
      • JSON_EXISTS
        • 语法
        • 示例
      • JSON_OBJECT
        • 语法
        • 示例
      • JSON_ARRAY
        • 语法
        • 示例
      • JSON_MERGEPATCH
        • 语法
        • 示例
      • JSON_OBJECTAGG
        • 语法
        • 示例
      • JSON_ARRAYAGG
        • 语法
        • 示例
      • JSON_SCALAR
        • 语法
        • 示例
      • JSON_DATAGUIDE
        • 语法
        • 示例
    • 实战应用场景
      • 场景一:从复杂 JSON 结构中提取多层嵌套数据
        • 示例数据
        • 查询示例
      • 场景二:合并和更新 JSON 文档
        • 示例数据
        • 合并示例

JSON_VALUE

JSON_VALUE 函数用于从 JSON 文档中提取单个标量值(如字符串、数字、布尔值)。它特别适合用于提取具体的字段值。

语法
JSON_VALUE(expression, path RETURNING data_type DEFAULT default_value ON ERROR error_clause)
参数说明
  • expression: JSON 数据的列或文本。
  • path: JSON 路径表达式,指向要提取的值。
  • data_type: 返回的数据类型。
  • default_value: 如果未找到值时的默认值。
  • error_clause: 发生错误时的处理方式。
示例

从 JSON 文档中提取名称为 “name” 的值,并指定返回类型为 VARCHAR2

SELECT JSON_VALUE('{"name": "John", "age": 30}', '$.name' RETURNING VARCHAR2) AS name
FROM dual;

JSON_QUERY

JSON_QUERY 函数用于从 JSON 文档中提取 JSON 对象或数组,而不是单个标量值。

语法
JSON_QUERY(expression, path [ RETURNING data_type ] [ PRETTY ] [ WITH UNIQUE KEYS ] [ error_clause ])
示例

从 JSON 文档中提取地址对象:

SELECT JSON_QUERY('{"name": "John", "age": 30, "address": {"city": "New York", "zipcode": "10001"}}', '$.address') AS address
FROM dual;

JSON_TABLE

JSON_TABLE 函数将 JSON 数据展开为关系表形式,允许你使用 SQL 查询 JSON 数据的各个部分。

语法
JSON_TABLE(expression, pathCOLUMNS (column_name column_type PATH 'json_path' [ DEFAULT default_expr ] [ error_clause ] ...)
)
示例

将 JSON 数组展开为表格:

SELECT jt.title, jt.key, jt.level
FROM json_table,JSON_TABLE(json_column, '$[*]'COLUMNS (title VARCHAR2(100) PATH '$.title',key VARCHAR2(50) PATH '$.key',level NUMBER PATH '$.level')) jt;

JSON_EXISTS

JSON_EXISTS 函数用于检查 JSON 文档中是否存在指定的路径。

语法
JSON_EXISTS(expression, path [ error_clause ])
示例

检查 JSON 文档中是否存在 “address” 对象:

SELECT JSON_EXISTS('{"name": "John", "age": 30, "address": {"city": "New York", "zipcode": "10001"}}', '$.address') AS address_exists
FROM dual;

JSON_OBJECT

JSON_OBJECT 函数用于生成一个 JSON 对象,它允许将键值对转换为 JSON 格式。

语法
JSON_OBJECT(key VALUE value [, key VALUE value ] ...)
示例

生成一个 JSON 对象:

SELECT JSON_OBJECT('name' VALUE 'John', 'age' VALUE 30) AS json_object
FROM dual;

JSON_ARRAY

JSON_ARRAY 函数用于生成一个 JSON 数组,支持多种类型的值。

语法
JSON_ARRAY(value [, value ] ...)
示例

生成一个 JSON 数组:

SELECT JSON_ARRAY('apple', 'banana', 42) AS json_array
FROM dual;

JSON_MERGEPATCH

JSON_MERGEPATCH 函数用于将两个 JSON 文档合并。它遵循 JSON Merge Patch 标准,适合用于部分更新 JSON 文档。

语法
JSON_MERGEPATCH(target, patch)
示例

将两个 JSON 文档合并:

SELECT JSON_MERGEPATCH('{"name": "John", "age": 30}', '{"age": 31, "city": "New York"}') AS merged_json
FROM dual;

JSON_OBJECTAGG

JSON_OBJECTAGG 函数用于将一组键值对聚合成一个 JSON 对象,通常用于 GROUP BY 查询中。

语法
JSON_OBJECTAGG(key, value)
示例

将一组键值对聚合成 JSON 对象:

SELECT JSON_OBJECTAGG(department_name, department_id) AS departments_json
FROM departments
GROUP BY some_column;

JSON_ARRAYAGG

JSON_ARRAYAGG 函数用于将一组值聚合成一个 JSON 数组,类似于 SQL 的 ARRAY_AGG 函数。

语法
JSON_ARRAYAGG(value)
示例

将一组值聚合成 JSON 数组:

SELECT JSON_ARRAYAGG(employee_name) AS employees_json
FROM employees
GROUP BY some_column;

JSON_SCALAR

JSON_SCALAR 函数将标量值转换为 JSON 标量值,适合用于需要将 SQL 标量值转换为 JSON 格式的场景。

语法
JSON_SCALAR(value)
示例

将字符串转换为 JSON 标量值:

SELECT JSON_SCALAR('Hello, World!') AS json_scalar
FROM dual;

JSON_DATAGUIDE

JSON_DATAGUIDE 函数用于生成 JSON 数据指南,描述 JSON 文档的结构。它对于了解和管理复杂的 JSON 数据非常有用。

语法
JSON_DATAGUIDE(expression)
示例

生成 JSON 数据指南:

SELECT JSON_DATAGUIDE('{"name": "John", "age": 30, "address": {"city": "New York", "zipcode": "10001"}}') AS data_guide
FROM dual;

实战应用场景

场景一:从复杂 JSON 结构中提取多层嵌套数据

假设我们有一个复杂的 JSON 结构,包含嵌套的对象和数组。我们需要从中提取某些特定的信息并进行统计分析。

示例数据
{"employees": [{"name": "Alice","age": 30,"department": {"name": "Sales","location": "New York"},"projects": [{"name": "Project A", "status": "Completed"},{"name": "Project B", "status": "Ongoing"}]},{"name": "Bob","age": 35,"department": {"name": "HR","location": "Chicago"},"projects": [{"name": "Project C", "status": "Ongoing"}]}]
}
查询示例
SELECT e.name, e.age, d.name AS department_name, d.location, p.name AS project_name, p.status
FROM json_table t,JSON_TABLE(t.json_column, '$.employees[*]'COLUMNS (name VARCHAR2(50) PATH '$.name',age NUMBER PATH '$.age',NESTED PATH '$.department' COLUMNS (department_name VARCHAR2(50) PATH '$.name',location VARCHAR2(50) PATH '$.location'),NESTED PATH '$.projects[*]' COLUMNS (project_name VARCHAR2(50) PATH '$.name',status VARCHAR2(20) PATH '$.status'))) e;

场景二:合并和更新 JSON 文档

假设我们有两个 JSON 文档,表示不同时间点的用户信息更新。我们需要合并这些文档以生成最新的用户信息。

示例数据
{"name": "John","age": 30,"address": {"city": "New York", "zipcode": "10001"}
}
{"age": 31,"address": {"city": "San Francisco"}
}
合并示例
SELECT JSON_MERGEPATCH('{"name": "John", "age": 30, "address": {"city": "New York", "zipcode": "10001"}}','{"age": 31, "address": {"city": "San Francisco"}}') AS merged_json
FROM dual;

结论

Oracle 提供了全面的 JSON 函数集,允许开发者高效地处理 JSON 数据。无论是提取、查询、生成还是合并 JSON 数据,这些函数都能满足各种实际需求。通过掌握这些函数,开发者可以更好地在 Oracle 数据库中处理和分析 JSON 数据。希望本文能帮助你更好地理解和应用这些强大的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/18677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘

我在运行yolov5 6.0版本的detect.py时遇到该错误,后经调研发现是pytorch版本问题,当我把pytorch1.13版本换到2.2.0版本时,再运行detect.py时没有报错,正常运行。 pip install torch2.2.2 torchvision0.17.2 torchaudio2.2.2 --in…

[Linux打怪升级之路]-进程和线程

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、进程 1…

编程应用怎么使用编程语言:深入探索与实战指南

编程应用怎么使用编程语言:深入探索与实战指南 在数字化时代,编程语言如同魔法语言,赋予了编程应用无限的可能性。然而,对于许多初学者来说,如何有效地使用编程语言来构建应用却是一个充满困惑与挑战的过程。本文将从…

etcd学习笔记

博客参考:K8s组件:etcd安装、使用及原理(Linux) 分布式系统架构中对一致性要求很高,etcd就满足了分布式系统中的一致性要求,实现了分布式一致性键值对存储的中间件。etcd完整的集群至少需要3台&#xff0c…

Netty-读写原理

归档 GitHub: Netty-读写原理 读原理 参考:选择器-监听-原理 sign_o_002 主要看 NioByteUnsafe#read() 相当于读取底层信道中的字节 io.netty.channel.nio.AbstractNioByteChannel.NioByteUnsafe 下游链处理参考:处理器链-读流程 protected class Ni…

记录——随时更新

姓名:保密 生日:1998.01.09 民族:汉 爱好:吃 以下是我看过的,其中喜欢的,收集起来,以后有喜欢的还会添加,部分遗忘 电视剧 毒牙 非自然死亡(日剧) 校阅部女孩河野悦子(日剧) 失恋…

玩转STM32-直接存储器DMA(详细-慢工出细活)

文章目录 一、DMA介绍1.1 DMA简介1.2 DMA结构 二、DMA相关寄存器(了解)三、DMA的工作过程(掌握)四、DMA应用实例4.1 DMA常用库函数4.2 实例程序 一、DMA介绍 1.1 DMA简介 DMA用来提供外设与外设之间、外设与存储器之间、存储器与…

【算法】平衡二叉搜索树的左旋和右旋

树旋转是一种维护平衡树结构的重要操作,主要用于平衡二叉搜索树(如AVL树和红黑树)。树旋转分为左旋和右旋。 1. 树旋转的定义 左旋 (Left Rotation) 左旋操作将节点及其右子树进行调整,使其右子树的左子节点成为根节点&#xf…

有免费通配符证书吗?哪里可以申请?

市面上的免费SSL证书大多数为单域名证书,如果您的主域名拥有众多子域名,逐一申请单域名SSL证书不太现实,下面为介绍一款永久免费使用的通配符SSL证书申请流程 1 选择免费通配符证书提供商 免费通配符证书申请点击这里直接获取https://www.…

解决移动端使用el-drawer侧边栏展开时触摸滚动的问题

原因分析: 通过 el-drawer 控件实现了底部栏的展示和隐藏,但在移动设备上侧边栏展开时仍然可以通过触摸滑动页面内容,导致用户体验不佳,产生意外的滚动行为。 这是因为在底部栏展开时,未能有效阻止页面内容的触摸滑动…

分布式集群下的业务敏感数据加解密之具体业务解决方案(附代码)

前面的一篇文章中写了敏感数据加解密的通用解决方案,这篇文章来写一下具体的业务如何接入这个方案,业务的接入首要宗旨当然是对业务侵入性要最小,尽可能不影响原生的业务逻辑,说白了就是少改点代码。下面给大家提供一个简单的示例…

机械行业工程设计资质乙级技术负责人要求

机械行业工程设计资质乙级技术负责人的要求可以归纳为以下几点: 一、基本要求 学历:技术负责人应当具有大学本科以上学历。设计经历:技术负责人需要具有10年以上的设计经历。 二、项目经历要求 大型项目经验:技术负责人需要主…

redis 如何获取所有key的信息及值,相关过期时间查询

简单粗暴获取所有key keys * 另一种方式: scan 0 切换数据库: select db Map类型 获取map的数量 hlen key 获取map所有的数据 hvals key 或者 hgetall key 整个哈希表的过期时间: EXPIRE your_hash_key 3600 # 设置哈希表 yo…

前端渲染页面的原理

之前一直不愿意写一篇关于原理的,因为说起来实在是太繁杂,要写得细,码字梳理,计算下来起码都要差不多三周。以前一直躲避这个事情,现在反正有时间,为了不荒废自己,那就从头捋一遍。也方便自己后…

整理好了!2024年最常见 20 道 Rocket MQ面试题(四)

上一篇地址:整理好了!2024年最常见 20 道 Rocket MQ面试题(三)-CSDN博客 七、RocketMQ消费模式有几种? RocketMQ 提供了两种主要的消费模式,分别是: 集群消费模式(Clustering&…

HFish蜜罐实践:网络安全防御的主动出击

引言 随着网络攻击手段的不断演进,传统的被动防御策略已难以应对复杂多变的安全威胁。HFish蜜罐作为一种主动防御工具,通过模拟易受攻击的服务,吸引攻击者,不仅能有效捕获攻击行为,还能为安全分析和溯源提供宝贵信息。…

数据分析项目有哪些实施流程?揭示从数据准备到解决方案全过程

在当今数据驱动的商业环境中,数据分析项目的成功实施对于企业洞察市场趋势、优化产品服务、提升用户体验以及增强竞争力具有至关重要的作用。特别是对于直播类应用软件这样的快速增长领域,如何通过数据分析来扩大付费用户基础、提高用户留存率&#xff0…

音视频开发10 FFmpeg 内存模型-AVPacket, AVFrame

从现有的 Packet 拷贝一个新 Packet 的时候,有两种情况: • ①两个 Packet 的 buf 引用的是 同一数据缓存空间 ,这时 候要注意数据缓存空间的释放问题; • ②两个 Packet 的 buf 引用不同的数据缓存空间 ,每个 Pac…

矩阵结构下需要的文化导向

在产品研发与产品管理过程中,如何有效运行矩阵结构一直是企业面临的一大难题,尤其是在中国式官本位文化很强势的文化传统下。但是,这个难题是完全可以解决的,汉捷咨询在国内就已经帮助200多家企业建立了有效的矩阵结构。基于汉捷的…