墨墨导读:世界上没有不存在 Bug 的软件,Bug 总是在变化中,层出不穷。Oracle 19c 中,一个有趣的 BUG 在国外的微博上引起热议。
首先看看如下一段代码,大家来猜测一下两次 put_line 的输出:
你可能会说,what ? 这有什么不同?
先看看在 Oracle 11g 中的结果:一切正常,可是我们再看看 Oracle 19c 中,有一点点 slightly worrying wrong 出现了,在 Patrick Jolliffe 的微博上,作者展示了这个输出:
在 Oracle 18c 、19c 中,应该都可以建到这个效果:
显然这是由于 Bug 引发的,Oracle 在处理 LOB 对象时,当对 Null 或者 empty clob 结合 String 时,遇到了这个 BUG。
Bug 号是:31142377 。问题显示在 21.1 版本中修正。但是针对 19.5 / 19.6 都有独立的补丁可以下载。
如果您的数据库中有对于 CLOB 的频繁操作,建议检查是否遇到过不曾注意到的BUG,因为这个 BUG 不会抛出异常,可能会导致数据存储的丢失。
Patch 31142377: CONCATENATION OF A NULL CLOB WITH NON-NULL DATA YIELDS WRONG RESULTS WHEN DEST. LOB IS PART OF THE CONCATENATION
官方版本的重现代码如下:
执行效果如下:
供读者参考,大家也可以看看 18c、19c 不同版本上的输出表现。
墨天轮原文链接:https://www.modb.pro/db/27833(复制到浏览器中打开或者点击“阅读原文”)