解决人大金仓数据库KingbaseES json_equal表达式不支持json和jsonb类型的问题

关键字

JSON_EQUAL、参数类型、JSON、JSONB、人大金仓

问题描述

对于目前KES中oracle模式下JSON_EQUAL比较输入的两个JSON值是否相等这一条件表达式,当为表达式中参数1与参数2的任意位置传入json或jsonb值时,KES均不能有效支持该种类型参数的传入,导致报错。详见下图,当对表达式中传入的数据转换为json或者是jsonb以及原生json值时,会出现报错提示,该报错出现的原因即为不支持上述类型。

问题分析

缺少JSON和JSONB参数类型的支持

解决方案

为了更好地支持用户的行为,提升KES的可使用性,并能够兼容Oracle数据库,在支持JSON_EQUAL表达式的基础之上添加了表达式支持json和jsonb两种参数类型。其中,表达式的两个参数位置均可支持json和jsonb两种参数,具体使用案例如下所示:

两个输入均为json与jsonb类型:

select json_equal('{"uzi":1}'::json,'{"uzi":2}'::jsonb error on error);

select json_equal('{"uzi":1}'::json,'{"uzi":2}'::json);

select json_equal(jsonb'{"uzi":1}',jsonb'{"uzi":1}');

select json_equal(jsonb'{"uzi":1}',json'{"uzi":1}' error on error);

select json_equal('1'::json,'1'::json);

select json_equal('{"uzi":1}'::varchar::jsonb,'{"uzi":2}'::varchar::jsonb);

select json_equal(lower('{"A":1}')::jsonb,'{"a":2}'::jsonb);

select json_equal('1,2'::json,'1,2'::json);

其中一个为json或jsonb类型

select json_equal('1','{"a":1,2}'::json);

select json_equal('false','{"a":1,2}'::json);

select json_equal('{"a":1,2}'::json,null);

select json_equal('1'::json,'1');

参考资料

《KingbaseES SQL语言参考手册》

相关推荐
倔强的石头_3 小时前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_3 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab4 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence4 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神4 天前
三、用户与权限管理
数据库·mysql
麦聪聊数据5 天前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡5 天前
【MySQL数据库】数据类型与表约束
数据库·mysql
曹牧5 天前
Oracle EXPLAIN PLAN
数据库·oracle
BD_Marathon5 天前
SQL学习指南——视图
数据库·sql