Sql 可能的Oracle错误,带有;大于0“;在where子句中

Sql 可能的Oracle错误,带有;大于0“;在where子句中,sql,oracle,select,Sql,Oracle,Select,我有一个select语句,它提供了错误的行数。 我可以在Oracle Database 11g Enterprise Edition 11.2.0.4.0-64位版本上重现问题和Oracle Database 12c Enterprise Edition 12.1.0.2.0-64位版本上重现问题我无法在Oracle Database 11g Enterprise Edition 11.2.0.3.0-64位版本上重现问题 测试数据: CREATE TABLE PERSON AS SELECT

我有一个select语句,它提供了错误的行数。 我可以在
Oracle Database 11g Enterprise Edition 11.2.0.4.0-64位版本上重现问题
Oracle Database 12c Enterprise Edition 12.1.0.2.0-64位版本上重现问题
我无法在
Oracle Database 11g Enterprise Edition 11.2.0.3.0-64位版本上重现问题

测试数据:

CREATE TABLE PERSON AS
SELECT LEVEL AS ID, 'Person_'||LEVEL AS NAME, 10 as maxVal
FROM DUAL 
CONNECT BY LEVEL <= 5;

create table orders as
SELECT LEVEL AS ID, 'Order_'||LEVEL AS NAME
FROM DUAL 
CONNECT BY LEVEL <= 3;
如果我将查询修改为以下内容,我将得到5个结果(应该是正确的数字):

此外,以下修改可提供正确的结果:

select p.*
      from person p
     where (maxVal - (select count(*)
                         from orders o
                        where o.id = p.id)
           )  > 0 + 0
如果使用绑定变量,也会得到正确数量的结果:

select p.*
      from person p
     where (maxVal - (select count(*)
                         from orders o
                        where o.id = p.id)
           )  > :num

那么,如果我使用“大于0”,是否有任何(已知)错误?

这是在修补另一个错误之后出现的错误

(“缺陷17564992错误结果,修复了缺陷12999577,当前为My Oracle支持文档ID 17564992.8”)

它有自己的补丁(补丁17564992,我们还没有测试),但有一个解决方法(我们测试过):


“如果我使用绑定变量,我也会得到正确数量的结果”-您在变量中输入了什么值?我可以使用0或1作为绑定值。所以,这似乎只是一个问题,如果我使用“>0”硬编码。奇怪的问题确实。计数应为0或1,因此计算值应为10或9。在任何一种情况下,你都应该得到所有的人。我不清楚为什么这不起作用,但我可以复制它。如果你把计算放在字段中,你会看到每个人都返回一个很好的10或9。。此外,如果将maxval拉入计数查询,它也可以工作:
(从…)中选择p.maxval-count(*)0
,但这只是一个解决方法,而不是一个解释。是的,有一些修改作为解决方法,例如:
选择nvl(count(*),0)
select p.*
      from person p
     where (maxVal - (select count(*)
                         from orders o
                        where o.id = p.id)
           )  > 0 + 0
select p.*
      from person p
     where (maxVal - (select count(*)
                         from orders o
                        where o.id = p.id)
           )  > :num
alter session set "_fix_control" = '12999577:0';
alter session set "_optimizer_squ_bottomup"= FALSE;