关键字
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');