如何配置Oracle 19c JSON存储_环境要求与自动类型映射

Oracle 19c JSON列必须声明为JSON类型并配合RETURNING显式指定返回类型,否则无法启用自动类型映射、索引下推和数值运算;已有表需通过ADD-UPDATE-DROP迁移,且JSON_TABLE是唯一支持数组展开与类型绑定的方式。Oracle 19c JSON列必须用 JSON 约束,不能只靠 IS JSON 检查很多人以为在 create table 里加个 check (col is json) 就能当 json 列用,其实不行------这只能做插入校验,不触发 oracle 内置的 json 自动类型映射(比如把 {"id": 123} 的 id 当数字处理)。真要启用自动映射,必须显式声明列类型为 json:CREATE TABLE orders ( id NUMBER, payload JSON);这样 Oracle 才会启用 JSON 值的内部结构感知,后续用 . 路径访问时才能正确推导字段类型、支持函数下推(如 JSON_VALUE(payload, '.amount' RETURNING NUMBER) 直接走索引)。常见错误现象:JSON_VALUE 返回字符串而非数字,JSON_TABLE 报 ORA-40478,或谓词无法下推导致全表扫描。JSON 类型列要求 Oracle 19c+ 且兼容级别 ≥ 19.0(检查 VVERSION 和 COMPATIBLE 参数)如果已有表,不能直接 ALTER COLUMN ... TYPE JSON,得先 ADD 新列 → UPDATE 迁移 → DROP 旧列从 19c 开始,JSON 类型列默认启用严格模式(STRICT),非法 JSON 会直接拒绝插入,不像 IS JSON 那样容忍空格/注释自动类型映射依赖 RETURNING 显式声明,不是"智能推断"Oracle 不会根据 JSON 内容自动决定返回什么 SQL 类型。哪怕你存的是 {"price": 99.99},JSON_VALUE(payload, '.price') 默认返回 VARCHAR2(4000),不是 NUMBER。必须写明 RETURNING:SELECT JSON_VALUE(payload, '$.price' RETURNING NUMBER) AS price_numFROM orders;否则所有数值都当字符串处理,排序、比较、索引都会出错(比如 '10' > '9' 成立,但数值上是错的)。使用场景:报表取值、JOIN 条件、WHERE 中范围查询(JSON_VALUE(...) > 100)。RETURNING 支持 NUMBER、DATE、TIMESTAMP、VARCHAR2(n),不支持 BOOLEAN(JSON boolean 在 Oracle 中只能转成 VARCHAR2 或用 JSON_EXISTS 判断)若 JSON 字段可能为空或缺失,加 NULL ON ERROR(默认行为),避免报 ORA-40476性能影响:带 RETURNING NUMBER 的表达式可被函数索引覆盖;纯字符串返回则无法利用数值索引JSON_TABLE 是唯一支持"展开 JSON 数组 + 自动类型绑定"的方式想把 {"items": {"qty": 2}, {"qty": 5}} 展开成两行,并让 qty 直接是数字?不用自己 REGEXP_SUBSTR 解析。用 JSON_TABLE + COLUMNS 子句明确类型即可: Felvin AI无代码市场,只需一个提示快速构建应用程序

相关推荐
_冷眸_28 分钟前
Python 调用大模型 API:最小请求、Base URL 和 401/404 排查
开发语言·人工智能·python
standxy39 分钟前
即时库存同步实战:从旺店通拉取库存详情落库 MySQL 的完整策略
数据库·集成·电商
麦壳饼39 分钟前
SonnetDB:工业 IoT 中的 PID 历史分析与 PLC 协作
数据库·sonnetdb
吹什么轩1 小时前
MySQL 事务管理:从 ACID 到 MVCC,一篇讲透
数据库·mysql
Dumbness1 小时前
UIA 读微信群消息没有 id,怎么判断哪条是新的:后缀对齐在翻历史和撤回时整屏重报
python·算法
甜到心里的蛋糕1 小时前
从 QQ 机器人到 B 站 AI 运营:一套可复现的视频流水线踩坑实录
运维·人工智能·python·自动化·视频制作
张驰咨询公司1 小时前
六西格玛Python DOE试验矩阵:3因子2水平生成与验算
python·六西格玛·实验设计·itertools·doe试验矩阵
时间售卖铺1 小时前
Oracle DQL精髓:从基础到高级实战
运维·数据库·云原生·oracle
像风一样自由20202 小时前
2.如何用FastAPI把一个Python算法封装成HTTP服务
python·算法·fastapi
m0_639906942 小时前
MySQL 锁机制详解|表锁、行锁、意向锁,死锁成因与解决方案
数据库·mysql