使用默认值添加不可为空的列时出现Oracle错误

使用默认值添加不可为空的列时出现Oracle错误,oracle,Oracle,我曾经在Oracle 11g的各种实例中遇到过这个错误。无法亲自访问Oracle支持部门,以了解这是否是已识别/已解决的问题 该错误导致查询始终返回列的默认值,即使记录实际具有不同的值 它只在特定的查询中显示,这是由于使用一个add语句在以前存在的表中添加了一个具有默认值的不可为空的列引起的 请参阅下面的完整副本 下拉表testBugMain; 删除表testbug; -通过实FK或表观FK创建彼此相关的两个表。 创建testBugMain表 mainid NUMBER1不为空, str VAR

我曾经在Oracle 11g的各种实例中遇到过这个错误。无法亲自访问Oracle支持部门,以了解这是否是已识别/已解决的问题

该错误导致查询始终返回列的默认值,即使记录实际具有不同的值

它只在特定的查询中显示,这是由于使用一个add语句在以前存在的表中添加了一个具有默认值的不可为空的列引起的

请参阅下面的完整副本

下拉表testBugMain; 删除表testbug; -通过实FK或表观FK创建彼此相关的两个表。 创建testBugMain表 mainid NUMBER1不为空, str VARCHAR200空, 约束PK_testBugMain主键mainid ; 创建表testBugAdditional 附加ID编号1不为空, mainid NUMBER1不为空, 约束PK_testBugAdditional主键additionalid ; -在两者上插入两个值。 插入testBugMain mainid,str值为1,‘test-with-1’; 插入testBugMain mainid,str值为2,‘test-with-2’; 插入testBugMain mainid,str值为3,'test-with-3'; 在TestBug中插入额外的additionalid、mainid值1、1; 在TestBug中插入额外的additionalid、mainid值2、2; 在TestBug中插入额外的additionalid、mainid值3、3; -bug需要显示:添加一个新列,不为NULL,在本例中默认值为5。 -它需要通过ALTER添加,并且在同一句话中包含DEFAULT和NOTNULL,这样bug才能显现出来。 ALTER TABLE TESTBUG ADD bug NUMBER 1默认值5不为空; -更新列上的值,因此下面的查询应该返回这些值,而不是5。 更新testBugAdditional SET bug=1,其中mainid=1; 更新testBugAdditional SET bug=2,其中mainid=2; 更新testBugAdditional SET bug=3,其中mainid=3; -健全性检查返回的值是否正确。 从testBugMain中选择ma.mainid、ma.str、ad.bug,ma.mainid=ad.mainid上的ma内部连接testBugAdditional ad; -疯狂检查返回的值是默认值。 从中选择mainid、str、bug 从testBugMain ma中选择ma.mainid、ma.str、ad.bug LEFT JOIN-bug需要显示左连接。 TestBugMA.mainid=ad.mainid上的附加ad ORDER BY ma.mainid ASC-可能是bug显示任何订单所必需的?。 其中rownum<6-bug需要显示分页;​ 尽管暴露bug的查询看起来有些复杂,但我认为,使用左连接进行排序、分页的查询实际上并不奇怪,而且考虑到所有因素,很少出现bug清单可能更糟糕

问题

这是Oracle确定/解决的问题吗

这个问题有解决办法吗?

解决方案/解决办法

要解决此问题,请始终以类似于以下方式向现有表中添加不可为空的列:

-使用默认值将列添加为可空。 ALTER TABLE existingTable ADD newColumn NUMBER 1默认为5; -添加NOTNULL约束。 ALTER TABLE existingTable MODIFY NEWCLUMN不为空;
这个问题不会在12.1中重现,这是我从您的测试用例中得到的输出

    MAINID STR                         BUG
---------- -------------------- ----------
         1 test-with-1                   1
         2 test-with-2                   2
         3 test-with-3                   3


    MAINID STR                         BUG
---------- -------------------- ----------
         1 test-with-1                   1
         2 test-with-2                   2
         3 test-with-3                   3

顺便说一句,感谢您编写了一个优秀的测试用例。这是如何发布的一个很好的例子。

有问题吗?你有错误号吗?如果是这样的话,我可以找到修复程序是否已被后传。好的一点,我假设这些问题是隐含的,但现在已经将它们直接添加到细节中。其中一部分是我自己回答的解决方法,以获得知识。