手机版
你好,游客 登录 注册
背景:
阅读新闻

Oracle 12c疑似bug:json_value(null, ...)可能出现重复记录

[日期:2019-07-27] 来源:Linux社区  作者:wggj [字体: ]

一、问题描述

最近,用户抱怨Oracle 12c的某个查询结果出现了有重复记录的情况。经调查分析,查询sql涉及到json_value函数,可简化为:

select ID, json_value(json_field, '$.Code'), json_value(json_field, '$.Time')
from json_table where ID=390;

在不同的测试库中,有时结果为一条记录(正确),有时为二条记录(错误)。

再进一步分析,发现出现改问题的记录,json_field的内容均为null。

二、疑似bug的证据

在网上没有搜索到类似情况,但依然认为其为疑似bug,证据为:

1 当sql只使用一个json_value函数时,查询结果始终正确:

select ID, json_value(json_field, '$.Code') from json_table where ID=390;
select ID, json_value(json_field, '$.Time') from json_table where ID=390;

两条语句均只返回一条记录。

2 使用count(*)时,查询结果始终正确:

create or replace view json_view as
select ID, json_value(json_field, '$.Code'), json_value(json_field, '$.Time') from json_table ;

select * from json_view; -- 结果为2条记录

select count(*) from json_view; --结果为1

三、解决办法

猜测是json_value函数在解析null时出现了偏差,那么把null转换为最简单的有效json即可:

select ID, json_value(nvl(json_field, '{}'), '$.Code'), json_value(nvl(json_field, '{}'), '$.Time')
from json_table where ID=390;
-- 结果始终是一条记录

PS:

  • 如果sql中涉及多个空的json字段,那么可能出现更多的重复记录。
  • 原始数据涉及客户机密,只好如此处理。

更多Oracle相关信息见Oracle 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=12

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址https://www.linuxidc.com/Linux/2019-07/159603.htm

linux
相关资讯       Oracle 12c 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款