Oracle JSON 函数详解与实战
Oracle 数据库提供了丰富的 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 数据。希望本文能帮助你更好地理解和应用这些强大的工具。
相关文章:
Oracle JSON 函数详解与实战
Oracle 数据库提供了丰富的 JSON 函数集,使得开发者可以高效地处理 JSON 数据。本文将详细介绍这些函数,包括它们的语法、使用场景、具体示例,以及在实际项目中的应用。 文章目录 JSON_VALUE语法参数说明示例 JSON_QUERY语法示例 JSON_TABLE语…...
C#面:请解释转发与跳转的区别
在C#中,转发(forwarding)和跳转(jumping)是两种不同的控制流程操作。 转发 是指将控制权从一个方法或函数转移到另一个方法或函数。在转发中,程序会将当前的执行状态传递给另一个方法,并在该方…...

Java+IDEA+SpringBoot药物不良反应ADR智能监测系统源码 ADR智能化监测系统源码
JavaIDEASpringBoot药物不良反应ADR智能监测系统源码 ADR智能化监测系统源码 药物不良反应(Adverse Drug Reaction,ADR)是指在使用合格药品时,在正常的用法和用量下出现的与用药目的无关的有害反应。这些反应往往因药物种类、使用…...

linux系统模拟资源消耗的简单手段
当我们在做系统性能,稳定性,高可用等特殊场景的测试时,往往要对计算机的硬件资源做出比较苛刻的限制,因此需要最简便的办法增加CPU,内存,磁盘,网络等硬件环境的资源压力。下面介绍实现这些操作的…...

吉林大学软件工程简答题整理
1.6种软件过程模型列举,及优缺点(每个都从时间、质量、过程、本身特点去考虑) 瀑布模型 优点缺点V模型 优点:缺点: 原型模型 优点:演化模型 建增模型 优点缺点螺旋模型 优点缺点喷泉模型 RUP、敏捷工程、…...
爬山算法介绍
目录 1.概述 2.产生 3.定义 4.优缺点 5.应用示例 6.未来展望 7.示例代码 1.概述 爬山算法是一种简单的启发式搜索算法,从起始点开始,每次选择当前位置邻域内的最优解作为下一个位置,直到达到目标点或无法继续前进。爬山算法的基本思想…...
在linux中配置关于GFS创建各种卷以及卷组--配置实验
服务器的相关信息 服务器的相关信息 卷名称 卷类型 空间大小 Brick dis-volume 分布式卷 12 Node1(/e6)、node2(/e6) Stripe-volume 条带卷 10 Node1(/d5)、node2(/d5) Rep-volume 复制卷 5 Node3(/d5)、node4(/d5) Dis-stripe 分布式条带卷 12 Node1(/b3)、node2(/b3)、node(…...

安泰电子:使用高压放大器时有哪些需要注意的呢
随着科技的不断进步,高压放大器在各种科学实验、工程应用和产业生产中扮演着重要的角色。然而,由于高压放大器的特殊性,使用时需要特别小心和谨慎。下面将详细介绍使用高压放大器时需要注意的事项,以确保安全、稳定地进行实验和应…...

为什么大部分新手做抖音小店赚不到钱?
大家好,我是喷火龙。 今天来给大家聊聊,为什么大部分新手做抖店赚不到钱? 不知道大家想过这个问题没有,可能有些人把赚不到钱的原因归结于市场、或者平台、又或者运营技术以及做店经验。 但我觉得这些都不是重点,重…...
跳跃游戏(2)
问题描述 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 输入࿱…...

11.Redis之zset类型
1.zset类型基本介绍 有序描述的是:升序/降序 Set 集合 1.唯一 2. 无序 孙行者,行者孙, 者行孙 >同一只猴~~ List有序的 孙行者,行者孙, 者行孙 >不同的猴~~ zset 中的 member 仍然要求是唯一的!!(score 则可以重复) 排序的规则是啥? 给 zset 中的 member 同…...
Python怎样将PDF拆分成多个文件
在 Python 中,你可以使用 PyPDF2 库来拆分 PDF 文件。以下是一个简单的示例,演示如何将一个 PDF 文件拆分为多个单页 PDF 文件。 首先,你需要安装 PyPDF2 库。如果尚未安装,可以使用以下命令进行安装: pip install P…...
C语言-----前置++和后置++的不同
#include <stdio.h> int main() {int a, b, c;a 5;c a;b c, c, a, a;b a c;printf("a %d b %d c %d\n:", a, b, c);return 0; }/*1、逗号运算符的优先级比赋值运算符号的优先级低2、、的优先级比高3、多个号在一起的时候,其优先级为后置、、…...

685. 冗余连接 II
685. 冗余连接 II 问题描述 在本问题中,有根树指满足以下条件的 有向 图。该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。 输入一个有向图,该…...

自养号测评是什么?亚马逊、沃尔玛、Target卖家如何建立自己的护城河?
近期有跨境卖家咨询我自养买家账号测评的事情,他们还是有不了解自养号测评的,所以珑哥觉得有必要再讲一下卖家测评的一些事情,之前文章也说过。这可能是跨境卖家运营的一个趋势。今天珑哥着重来介绍一下自养号测评 一、什么叫做自养号测评&a…...

计算机毕业设计 | SpringBoot招投标 任务发布网站(附源码)
1,绪论 在市场范围内,任务发布网站很受欢迎,有很多开发者以及其他领域的牛人,更倾向于选择工作时间、工作场景更自由的零工市场寻求零散单子来补贴家用。 如今市场上,任务发布网站鱼龙混杂,用户需要找一个…...

element el-table表格表头某一列表头文字或者背景修改颜色
效果如下 整体代码 ,具体方法在最下面! <el-table v-loading"listLoading" :data"sendReceivList" element-loading-text"Loading" border fit ref"tableList" :header-cell-class-name"addClass&quo…...

移动云:连接未来的智慧之旅
随着数字化转型的加速,云服务在各行各业中的应用越来越广泛。移动云不仅提供了灵活的计算和存储资源,还通过创新的技术手段,为企业和开发者解决了许多实际问题。在这个变革的大背景下,移动云服务作为中国移动倾力打造的云业务品牌…...

如何确保大模型 RAG 生成的信息是基于可靠的数据源?
在不断发展的人工智能 (AI) 领域中,检索增强生成 (RAG) 已成为一种强大的技术。 RAG 弥合了大型语言模型 (LLM) 与外部知识源之间的差距,使 AI 系统能够提供更全面和信息丰富的响应。然而,一个关键因素有时会缺失——透明性。 我们如何能够…...
Laravel(Lumen8) + Supervisor 实现多进程redis消息队列
相关文章:Supervisor守护进程工具安装与使用 1、通用消息队列 /App/Job/CommonJob.php: <?phpnamespace App\Jobs; use Illuminate\Support\Facades\Log; use Illuminate\Support\Str;class CommonJob extends Job {public $timeout; //超时时间protected $data; //队列…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...