讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在Oracle 21c中使用原生JSON数据类型?

阿强姑娘_6795

阿强姑娘_6795

发布时间:2026-08-23 11:16:07

|

380人浏览过

|

来源于php中文网

原创

Oracle 21c 中 JSON 是原生类型,但建表需避让保留字(如 add→address)、必须加 CHECK(soc IS JSON) 约束,JDBC 需 ojdbc11 驱动+oracle.jdbc.json=true 参数及 JsonStructure 映射。

如何在oracle 21c中使用原生json数据类型?

JSON 类型在 Oracle 21c 中是真实可用的原生类型,不是伪类型或 CHECK 约束模拟。但直接写 soc JSON 就建表会失败——因为列名冲突或驱动/语法版本不匹配是最常见拦路虎。


CREATE TABLE 时 JSON 列名不能是 Oracle 保留字

ADD 是 Oracle 的保留关键字(用于 ALTER TABLE ... ADD),所以这个建表语句:

CREATE TABLE a (name VARCHAR2(50), age NUMBER, add VARCHAR2(100), soc JSON);

必然报 ORA-00904: invalid identifier,和 JSON 类型本身无关。

  • 把 add 改成 address、addr 或其他非保留字即可
  • 强行用双引号包住:"add" 虽然能过语法检查,但后续所有 SQL 都得带引号、大小写敏感、ORM 映射大概率崩,不建议
  • 其他常见踩坑列名:ORDER、LEVEL、TYPE、VALUE —— 建表前先查 V$RESERVED_WORDS

JSON 列必须配合 IS JSON 检查约束才生效

Oracle 21c 的 JSON 类型不是“开箱即用”的强类型:它底层依赖 OSON 二进制格式,但仅靠列声明 soc JSON 不自动启用校验或索引优化。

Market Oracle
Market Oracle

金融事件影响分析器 — 获取突发新闻,追踪金属/石油/加密货币/股票价格,预测短中长期市场连锁反应

下载
  • 必须显式加 CHECK (soc IS JSON),否则插入非法 JSON 不报错,后续 JSON_VALUE 可能静默返回 NULL
  • 这个约束不是可选的“锦上添花”,而是触发数据库启用 JSON 语义解析的前提
  • 不要只写 CHECK (soc IS JSON STRICT):21c 默认就是 STRICT 模式,STRICT 关键字多余,还可能在某些补丁版本报错

JDBC 读取 JSON 列必须启用 oracle.jdbc.json=true

即使表结构完全正确,Java 程序默认拿到的仍是 String 或 CLOB,不是可导航的 JSON 对象。

  • 连接 URL 必须带参数:?oracle.jdbc.json=true(例如:jdbc:oracle:thin:@//host:1521/orclpdb?oracle.jdbc.json=true)
  • 驱动必须是 ojdbc11(21.10+),ojdbc8 不识别该参数,会静默忽略
  • ResultSet.getObject("soc", JsonStructure.class) 才能拿到 oracle.json.parser.JsonParserImpl$JsonObjectImpl 实例;用 getString() 或 getClob() 会丢失 OSON 二进制优势,且无法调用 .get("x").asNumber() 等方法
  • 如果用 Spring JdbcTemplate,需在 DataSource 初始化时注册类型映射:connection.setTypeMap(Map.of(OracleType.JSON, JsonStructure.class))

写入大 JSON 或含二进制内容时,别依赖 setString()

JSON 列支持 OSON 格式,但 JDBC 层不自动转换:

  • 纯文本 JSON 字符串({"name":"a"})可用 PreparedStatement.setString(),但长度超过 4000 字节时,ojdbc11 可能截断或报 ORA-40495
  • 含二进制字段(如 Base64 图片)必须用 setBytes() + UTL_RAW.CAST_TO_RAW() 包装,或走 setClob() 配合 StringReader
  • 最稳妥方式:统一用 OraclePreparedStatement.setObject(colIndex, jsonValue, OracleType.JSON),其中 jsonValue 是 JsonStructure 实例(由 Json.createStructure() 构造)

最易被忽略的一点:21c 的 JSON 类型和 19c 的 JSON 列行为不兼容——前者强制 OSON 存储、后者仍是文本+CHECK,混用会导致 JDBC 读取逻辑彻底失效。

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

1975

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2742

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

956

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3079

2025.09.10

oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

861

2023.08.16

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

2353

2023.09.15

oracle怎么分页
oracle怎么分页

实现分页的步骤:1、使用ROWNUM进行分页查询;2、在执行查询之前进行设置分页参数;3、使用"COUNT(*)"函数来获取总行数,并使用"CEIL"函数来向上取整计算总页数;4、在外部查询中使用"WHERE"子句来筛选出特定的行号范围,以实现分页查询。想了解更多oracle怎么分页的文章,可以来阅读本专题先的文章。

2390

2023.09.18

Oracle查看表操作历史记录
Oracle查看表操作历史记录

查看操作历史记录的方法:1、使用Oracle内置的审计功能,可以记录数据库中发生的各种操作,包括登录、DDL语句、DML语句等;2、使用Oracle日志文件,其中包含了数据库中发生的各种操作,可以通过查看日志文件来获取操作历史记录;3、使用Oracle的Flashback功能,可以查看数据库在某个时间点的操作历史记录;4、使用第三方工具等。本专题还提供其他查看表操作的文章,大家可以免费阅读。

1389

2023.09.19

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

180

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn