如何配置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无代码市场,只需一个提示快速构建应用程序

相关推荐
DeepVisionary6 小时前
谷歌 Gemini Omni 1.1 Flash 正式发布:4K 视频、40 秒场景延伸,视频生成进入按 token 计费时代
python·自动化
zlwool7 小时前
图纸管理选型避坑指南
数据库·erp·设备erp·非标机械
阡之尘埃7 小时前
Python数据分析案例85——大模型微调全流程(SFT的LoRA微调)
人工智能·python·深度学习·语言模型·llm·微调·千问
海兰7 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(三)
javascript·python·金融
cvcode_study7 小时前
Ollama+ComfyUI 多模态
大数据·人工智能·python
小灰灰搞电子8 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
星核0penstarry8 小时前
试一试用gr.Workflow把AI多步骤串联变成可视化画布
人工智能·python·ai作画·api·ai编程·工作流·api聚合平台
taller_20009 小时前
【005】PiE 与传统 VBA 的核心区别
python·vba·pie·py
海兰9 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(一)
javascript·python·金融
大衛說9 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习