解决人大金仓数据库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语言参考手册》

相关推荐
skywalk81636 分钟前
GitHub - riscv-software-src/riscv-isa-sim: Spike, a RISC-V ISA Simulator
开发语言·数据库
权权权权里24 分钟前
设计一个利用事务特性可以阻塞线程的排他锁,并且通过注解和 AOP 来实现
数据库·oracle
多喝清晨的粥30 分钟前
Mac MySQL 8.0.30的安装(保姆级教程)
数据库·mysql·macos
Rinai_R1 小时前
MySQL学习记录1【DQL和DCL】
数据库·笔记·学习·mysql
Linux运维老纪1 小时前
MySQL常用命令之汇总(Summary of Commonly Used Commands in MySQL)
服务器·数据库·计算机网络·mysql·云计算·运维开发
厦0042 小时前
【MySQL】MVCC详解, 图文并茂简单易懂
数据库·sql·mysql·mvcc·并发控制·undo日志
扶梦4112 小时前
腾讯云AI代码助手编程挑战赛-解忧助手
java·linux·数据库
土了个豆子的2 小时前
线性表的接口定义及使用
开发语言·数据结构·数据库
Bytebase2 小时前
自然语言转 SQL:通过 One API 将 llama3 模型部署在 Bytebase SQL 编辑器
运维·数据库·dba·开发者·数据库管理·devops
blockrock2 小时前
数据库环境安装(day1)
数据库