Подтвердить что ты не робот

Возможная ошибка Oracle с "больше 0" в том месте, где

У меня есть оператор select, который поставляет неправильное количество строк. Я могу воспроизвести проблему на Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production и на Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production Я не могу воспроизвести ее на Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

Testdata:

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;

Если я попробую выполнить следующий запрос, я получаю только 3 результата вместо 5:

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

Если я изменяю Query следующим образом, я получаю 5 результатов (что должно быть правильным номером):

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

Также следующая модификация предоставляет правильный результат:

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

Я также получаю правильное количество результатов, если я использую переменные Bind:

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

Итак, есть ли (известная) ошибка, если я использую "больше 0"?

4b9b3361

Ответ 1

Это ошибка, возникшая после того, как исправлена ​​другая ошибка.

( "Ошибка 17564992 Неверные результаты с исправлением для ошибки 12999577 present My Oracle Support Doc ID 17564992.8" )

У него есть собственный патч (патч 17564992, мы не тестировали), но есть обходное решение (которое мы тестировали):

alter session set "_fix_control" = '12999577:0';
alter session set "_optimizer_squ_bottomup"= FALSE;