JSON 系列之2:JSON简单查询

news2024/12/27 18:25:48

本文为Oracle数据库JSON学习系列的第2篇,讲述如何对存储在数据库中的JSON文档进行简单的查询。

创建测试表,插入2条数据:

DROP TABLE colortab PURGE;

CREATE TABLE colortab (
    id    NUMBER,
    color VARCHAR2(4000),
    CONSTRAINT ensure_json CHECK ( color IS JSON )
);

INSERT INTO colortab VALUES ( 1,
                              '
 {
  "name":"black",
  "rgb":[0,0,0],
  "hex":"#000000"
 }
' );

INSERT INTO colortab VALUES ( 2,
                              '
 {
  "name": "orange red",
  "rgb":[255,69,0],
  "hex": "#FF4500"
 }' );

COMMIT;

查询使用dot notation即可,非常直观:

SQL> SELECT c.color.name from colorTab c;

NAME      
----------
black
orange red

SQL> SELECT c.color.rgb from colorTab c;

RGB       
----------
[0,0,0]
[255,69,0]

SQL> SELECT c.color.rgb[0] from colorTab c;

RGB       
----------
0
255

可以看到,对于标量和数组都可以查询,数组的第一个元素索引为0。

注意,这个别名是必须的,否则报错:

SQL> SELECT color.name from colorTab;

在行: 3 上开始执行命令时出错 -
SELECT color.name from colorTab
错误位于命令行: 3 列: 8
错误报告 -
SQL 错误: ORA-00904: "COLOR"."NAME": 标识符无效

https://docs.oracle.com/error-help/db/ora-00904/00904. 00000 -  "%s: invalid identifier"
*Cause:    The identifier or column name entered was invalid.
*Action:   Ensure the following

More Details :
https://docs.oracle.com/error-help/db/ora-00904/

对于表中一个不存在的列,SELECT会报错;但对于JSON文档中一个不存在的域,则不会报错,返回null。这正是 flexible schema 所需要的。

SQL> SELECT c.color.nofield from colorTab c;

NOFIELD   
----------



已选择 2 行。

如果你希望报错,可以修改初始化参数json_behavior,默认值是ON_ERROR:NULL

SQL> alter session set json_behavior='on_error:error';

Session已变更。

SQL> SELECT c.color.nofield from colorTab c;

在行: 5 上开始执行命令时出错 -
SELECT c.color.nofield from colorTab c
错误位于命令行: 5 列: 29
错误报告 -
SQL 错误: ORA-40462: JSON 路径 '$.nofield' 的求值结果为无值。

https://docs.oracle.com/error-help/db/ora-40462/40462. 00000 -  "JSON path '%s' evaluated to no value."
*Cause:    The specified JavaScript Object Notation (JSON) path expression
           did not select a value.
*Action:   Correct the JSON path expression.

More Details :
https://docs.oracle.com/error-help/db/ora-40462/

SQL> alter session reset json_behavior;

Session已变更。

参考

  • First Steps with JSON: Simple Queries

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

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

相关文章

E-commerce .net+React(一)——项目初始化

文章目录 项目地址一、创建.Net环境1.1环境配置1.1.1 使用vscode创建webapi1.1.2 Clean architecture结构创建1.1.3 将创建好结构的项目添加到git里1.1.4 EF Core配置1. 在infrastructure里安装EF所需环境2. 创建Product数据模型3. 创建EF Core的DbContext 数据库上下文4. 创建…

农家乐系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

NIPS2014 | GAN: 生成对抗网络

Generative Adversarial Nets 摘要-Abstract引言-Introduction相关工作-Related Work对抗网络-Adversarial Nets理论结果-Theoretical Results实验-Experiments优势和不足-Advantages and disadvantages缺点优点 结论及未来工作-Conclusions and future work研究总结未来研究方…

《战神:诸神黄昏》游戏运行时提示找不到emp.dll怎么办?emp.dll丢失如何修复?

《战神:诸神黄昏》游戏运行时提示找不到emp.dll怎么办?emp.dll丢失的修复方法 在畅游《战神:诸神黄昏》这款史诗级游戏的过程中,如果突然遭遇“找不到emp.dll”的错误提示,无疑会打断你的冒险之旅。作为一名深耕软件开…

笔记本通过HDMI转VGA线连接戴尔显示器,wifi不可用或网速变慢

早上开开心心的来使用我的分屏显示器,结果winP开拓展,我的wifi就断掉了,琢磨了好一阵我以为是wifi的问题,发现不进行拓展,网络又好了,一上午就研究这个了,说是hdmi信号干扰了wifi信号啥的额&…

【MATLAB第110期】#保姆级教学 | 基于MATLAB的PAWN全局敏感性分析方法(无目标函数)含特征变量置信区间分析

【MATLAB第110期】#保姆级教学 | 基于MATLAB的PAWN全局敏感性分析方法(无目标函数)含特征变量置信区间分析 一、介绍 PAWN(Probabilistic Analysis With Numerical Uncertainties)是一种基于密度的全局敏感性分析(Gl…

BiTCN-BiGRU基于双向时间卷积网络结合双向门控循环单元的数据多特征分类预测(多输入单输出)

Matlab实现BiTCN-BiGRU基于双向时间卷积网络结合双向门控循环单元的数据多特征分类预测(多输入单输出) 目录 Matlab实现BiTCN-BiGRU基于双向时间卷积网络结合双向门控循环单元的数据多特征分类预测(多输入单输出)分类效果基本描述…

python: Oracle Stored Procedure query table

oracel sql script CREATE OR REPLACE PROCEDURE SelectSchool(paramSchoolId IN char,p_cursor OUT SYS_REFCURSOR ) AS BEGINOPEN p_cursor FORSELECT *FROM SchoolWHERE SchoolId paramSchoolId; END SelectSchool; /-- 查询所有 CREATE OR REPLACE PROCEDURE SelectScho…

软件老化分析

软件老化 课程:软件质量分析 作业 解答 Python代码如下: n int(input("类别数:")) theta list(map(float, input("各个类别的权重:").split())) m list(map(int, input("各个类别的度量元数量&…

cesium通过经纬度获取3dtiles 得feature信息

找到这里3dtiles的两种访问方式: 1.1 3DTileContent#getFeature 这里涉及3DTile 数据结构,暂不了解3DTile 数据结构,因此暂不使用。 1.2 scene.pick 本次使用 scene表示虚拟场景中所有 3D 图形对象和状态的容器;scene中…

【Lua之·Lua与C/C++交互·Lua CAPI访问栈操作】

系列文章目录 文章目录 前言一、概述1.1 Lua堆栈 二、栈操作2.1 基本的栈操作2.2 入栈操作函数2.3 出栈操作函数2.4 既入栈又出栈的操作函数2.5 栈检查与类型转换函数2.5 获取表数据 三、实例演示总结 前言 Lua是一种轻量级的、高性能的脚本语言,经常被用于游戏开发…

Linux -- 生产消费模型

目录 概念 代码 BlockQueue.hpp 代码: 伪唤醒!! Thread.hpp 代码: Task.hpp 代码: test.cc 代码: 再次理解 概念 生产消费模型,也称为生产者-消费者问题,是计算机科学中的一…

DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(1)

DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(1) 架构 架构图 本设计方案的目标是在一台阿里云ECS服务器上搭建一个轻量级的Kubernetes服务k3s节点,并基于Argo搭建一套完整的DevOps CI/CD服务平台,包括Argo CD…

React 第二十节 useRef 用途使用技巧注意事项详解

简述 useRef 用于操作不需要在视图上渲染的属性数据,用于访问真实的DOM节点,或者React组件的实例对象,允许直接操作DOM元素或者是组件; 写法 const inpRef useRef(params)参数: useRef(params),接收的 …

【2024最新】基于Python+Mysql+django的水果销售系统Lw+PPT

作者:计算机搬砖家 开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:Java精选实战项…

利用Java爬虫速卖通按关键字搜索AliExpress商品

在这个信息爆炸的时代,数据的价值日益凸显。对于电商领域的从业者来说,能够快速获取商品信息成为了一项重要的技能。速卖通(AliExpress)作为全球领先的跨境电商平台,拥有海量的商品数据。本文将介绍如何使用Java语言编…

动态规划<五> 子数组问题(含对应LeetcodeOJ题)

目录 引例 经典LeetcodeOJ题 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 6.第六题 7.第七题 引例 OJ传送门 Leetcode<53> 最大子数组和 画图分析: 使用动态规划解决 1.状态表示 dp[i]表示以i位置为结尾的所有子数组中的最大和 2.状态转移方程 子数组的问题可以…

前端实现PDF预览的几种选择(pdfjs-dist、react-pdf、pdf-viewer)

记录 PDF预览的选型 对于浏览器自带的PDF预览 如果能直接使用&#xff0c;那自然最好不过了&#xff0c;但考虑多种因素&#xff0c;比如权限问题&#xff0c;禁止用户去下载PDF、预览样式不统一&#xff08;不同浏览器PDF预览的实现不同&#xff09;&#xff0c;所有最终放弃…

小米路由器开启SSH,配置阿里云ddns,开启外网访问SSH和WEB管理界面

文章目录 前言一、开启SSH二、配置阿里云ddns1.准备工作2.创建ddns脚本3.添加定时任务 三、开启外网访问SSH和WEB管理界面1、解除WEB管理页面访问限制2.手动添加防火墙端口转发规则&#xff0c;开启外网访问WEB管理和SSH 前言 例如&#xff1a;随着人工智能的不断发展&#xf…

机器学习(三)-多项式线性回归

文章目录 1. 多项式回归理论2. python通过多项式线性回归预测房价2.1 预测数据2.2导入标准库2.3 导入数据2.4 划分数据集2.5 构建二次多项式特征&#xff08;1, x, x^2&#xff09;2.6 导入线性回归模块2.7 对测试集进行预测2.8 计算均方误差 J2.9 计算参数 w0、w1、w22.10 可视…