首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >26ai新特性实战:SQL/JSON路径表达式支持DECODE与CASE

26ai新特性实战:SQL/JSON路径表达式支持DECODE与CASE

作者头像
胖头鱼的鱼缸
发布2026-07-08 15:29:12
发布2026-07-08 15:29:12
30
举报

胖头鱼的技术专栏-441 26ai新特性实战:SQL/JSON路径表达式支持DECODE与CASE(20260708)

代码语言:javascript
复制
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE

10年+数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家
圈内拥有“总监”称号,非著名社恐(社交恐怖分子)

全网同名:胖头鱼的鱼缸
ITPUB:yhw1809
除授权转载并标明出处外,均为“非法”抄袭
914fcc7ad57defa7868c3be1ca7fb4f5.jpg
914fcc7ad57defa7868c3be1ca7fb4f5.jpg

特性介绍

Oracle AI Database 23.26.2在SQL/JSON路径表达式中新增了对DECODE和CASE函数的支持。这两个函数分别类似于SQL中的DECODE函数和CASE表达式,但它们在JSON路径表达式内部工作,主要用于JSON_TRANSFORM的右侧(RHS)路径表达式中,实现对JSON数据的条件逻辑处理。

函数介绍

decode()函数

语法:decode(expr, match1, result1, match2, result2, …, [default]) 行为:将expr依次与match值比较,返回第一个匹配的result无匹配时返回default(可选);无default时返回null 特点:基于离散值的精确匹配,适合枚举类型映射

case()函数

语法:case(cond1, result1, cond2, result2, …, [default]) 行为:按顺序评估布尔条件,返回第一个为真的条件对应的result无条件为真时返回default(可选);无default时返回 null 特点:短路求值,支持范围比较和复杂条件

使用场景

  • JSON文档增强:根据JSON字段值自动添加分类标签字段例如根据salary字段添加tier(low/medium/high)
  • 数据脱敏与转换:在JSON_TRANSFORM中对敏感数据做条件处理例如根据部门代码映射为可读的部门名称
  • JSON数据迁移:将旧格式的枚举值批量转换为新格式
  • 业务规则嵌入:将条件逻辑直接嵌入路径表达式,避免额外SQL层处理
  • REST API后端:在UPDATE操作中根据JSON内容动态设置字段值

实战演示

同之前一样,使用用户NFTEST,已授权DB_DEVELOPER_ROLE角色,测试操作均在NFTEST用户下执行。

创建测试表并添加测试数据

代码语言:javascript
复制
CREATE TABLE json_path_test (
id NUMBER PRIMARY KEY,
data JSON
);

INSERT INTO json_path_test VALUES (1, '{"name":"Alice","age":30,"salary":50000,"dept":"Sales"}');
INSERT INTO json_path_test VALUES (2, '{"name":"Bob","age":25,"salary":75000,"dept":"Eng"}');
INSERT INTO json_path_test VALUES (3, '{"name":"Carol","age":35,"salary":120000,"dept":"Eng"}');

COMMIT;
image.png
image.png

测试1:路径表达式中的DECODE-默认的匹配/结果对

代码语言:javascript
复制
SELECT id, JSON_TRANSFORM(data,
SET '$.tier' = PATH 'decode($.salary, 50000, "low", 75000, "medium", "high")'
) AS transformed
FROM json_path_test
ORDER BY id;
image.png
image.png

测试2:没有默认值DECODE-无匹配时返回控制

代码语言:javascript
复制
SELECT id, JSON_TRANSFORM(data,
SET '$.tier' = PATH 'decode($.salary, 50000, "low", 75000, "medium")'
) AS transformed
FROM json_path_test
ORDER BY id;
image.png
image.png

测试3:DECODE只有默认值-没有匹配/结果对

代码语言:javascript
复制
SELECT id, JSON_TRANSFORM(data,
SET '$.label' = PATH 'decode($.salary, "no match")'
) AS transformed
FROM json_path_test
ORDER BY id;
image.png
image.png

测试4:路径表达式中的CASE-带默认条件的条件/结果对

代码语言:javascript
复制
SELECT id, JSON_TRANSFORM(data,
SET '$.tier' = PATH 'case($.salary < 60000, "entry", $.salary < 100000, "mid", "senior")'
) AS transformed
FROM json_path_test
ORDER BY id;
image.png
image.png

测试5:CASE短路求值-第一个为真的条件匹配

代码语言:javascript
复制
SELECT id, JSON_TRANSFORM(data,
SET '$.tier' = PATH 'case($.salary < 60000, "entry", $.salary < 100000, "mid", "senior")'
) AS transformed
FROM json_path_test
ORDER BY id;
image.png
image.png

测试6:使用字符串匹配的DECODE

代码语言:javascript
复制
SELECT id, JSON_TRANSFORM(data,
SET '$.dept_label' = PATH 'decode($.dept, "HR", "Human Resources", "IT", "Information Tech", "Other")'
) AS transformed
FROM json_path_test
ORDER BY id;
image.png
image.png

测试7:实际应用-使用条件式JSON_TRANSFORM更新表

代码语言:javascript
复制
UPDATE json_path_test
SET data = JSON_TRANSFORM(data,
SET '$.tier' = PATH 'decode($.salary, 50000, "low", 75000, "medium", "high")',
SET '$.eval' = PATH 'case($.age < 30, "young talent", $.age < 35, "established", "veteran")'
);

COMMIT;

SELECT id, dataFROM json_path_test ORDER BY id;
image.png
image.png

总结

本期对Oracle AI Database 26ai,23.26.2版本新引入的WSQL/JSON路径表达式支持DECODE与CASE新特性进行了完整介绍与实战演示。

老规矩,知道写了些啥。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 胖头鱼的鱼缸 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 胖头鱼的技术专栏-441 26ai新特性实战:SQL/JSON路径表达式支持DECODE与CASE(20260708)
    • 特性介绍
    • 函数介绍
      • decode()函数
      • case()函数
    • 使用场景
    • 实战演示
      • 创建测试表并添加测试数据
      • 测试1:路径表达式中的DECODE-默认的匹配/结果对
      • 测试2:没有默认值DECODE-无匹配时返回控制
      • 测试3:DECODE只有默认值-没有匹配/结果对
      • 测试4:路径表达式中的CASE-带默认条件的条件/结果对
      • 测试5:CASE短路求值-第一个为真的条件匹配
      • 测试6:使用字符串匹配的DECODE
      • 测试7:实际应用-使用条件式JSON_TRANSFORM更新表
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档