作者:胖头鱼的鱼缸(尹海文) Oracle ACE Pro: Database PostgreSQL ACE 10年+数据库行业经验 拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证 墨天轮MVP,ITPUB认证专家 圈内拥有“总监”称号,非著 名社恐(社交恐怖分子) 全网同名:胖头鱼的鱼缸 ITPUB:yhw1809 除授权转载并标明出处外,均为“非法”抄袭

Oracle AI Database 23.26.2在SQL/JSON路径表达式中新增了对DECODE和CASE函数的支持。这两个函数分别类似于SQL中的DECODE函数和CASE表达式,但它们在JSON路径表达式内部工作,主要用于JSON_TRANSFORM的右侧(RHS)路径表达式中,实现对JSON数据的条件逻辑处理。
语法:decode(expr, match1, result1, match2, result2, …, [default])
行为:将expr依次与match值比较,返回第一个匹配的result无匹配时返回default(可选);无default时返回null
特点:基于离散值的精确匹配,适合枚举类型映射
语法:case(cond1, result1, cond2, result2, …, [default])
行为:按顺序评估布尔条件,返回第一个为真的条件对应的result无条件为真时返回default(可选);无default时返回 null
特点:短路求值,支持范围比较和复杂条件
同之前一样,使用用户NFTEST,已授权DB_DEVELOPER_ROLE角色,测试操作均在NFTEST用户下执行。
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;

SELECT id, JSON_TRANSFORM(data, SET '$.tier' = PATH 'decode($.salary, 50000, "low", 75000, "medium", "high")' ) AS transformed FROM json_path_test ORDER BY id;

SELECT id, JSON_TRANSFORM(data, SET '$.tier' = PATH 'decode($.salary, 50000, "low", 75000, "medium")' ) AS transformed FROM json_path_test ORDER BY id;

SELECT id, JSON_TRANSFORM(data, SET '$.label' = PATH 'decode($.salary, "no match")' ) AS transformed FROM json_path_test ORDER BY id;

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;

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;

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;

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, data FROM json_path_test ORDER BY id;

本期对Oracle AI Database 26ai,23.26.2版本新引入的WSQL/JSON路径表达式支持DECODE与CASE新特性进行了完整介绍与实战演示。
老规矩,知道写了些啥。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31466763/viewspace-3175404/ ,如需转载,请注明出处,否则将追究法律责任。