A versão pode ser para Linux OEL 32 ou 64 bits ou Windows também, testei em 
10.2.0.4.0 e em 10.2.0.3.0, ambas deram problema.

Na versão 9.2.0.4 não acontece, eu fiz o mesmo teste.

Eu não entendo onde está o problema, se é com o IN ou com view inline 
relacionada com a tabela mais externa ou subselect idem. Só chego a conclusão 
que deve ser um bug, mas eu não sei nem como procurar por uma solução em patch 
para isso.

Alguém já deve ter passado por isso, se puderem me ajudar, o exemplo está 
abaixo. Não se importem muito com a lógica, esse select é só uma reprodução do 
meu problema, onde usei uma tabela e o resto substituí por dual colocando 
valores fixos. O problema é a condição QUANTIDADE_PESO = 0 que deveria ser 
false, pois a coluna está com valor 100, parece que é ignorada.

Comandos para reproduzir o problema:

CREATE TABLE PEDIDO (sequencial_pedido NUMBER, valor NUMBER);
INSERT INTO PEDIDO VALUES (204144, 1);
COMMIT;
SELECT V.*
FROM (SELECT I.SEQUENCIAL_PEDIDO,
SUM(I.VALOR) QUANTIDADE_PEDIDO,
(SELECT SUM(100)
FROM DUAL
WHERE I.SEQUENCIAL_PEDIDO = 204144) QUANTIDADE_PESO
FROM PEDIDO I
WHERE I.SEQUENCIAL_PEDIDO IN (SELECT 204144 FROM DUAL)
GROUP BY I.SEQUENCIAL_PEDIDO
) V
WHERE V.QUANTIDADE_PESO = 0 -- essa condição não funciona
;
SELECT /*+ RULE*/ V.*
FROM (SELECT I.SEQUENCIAL_PEDIDO,
SUM(I.VALOR) QUANTIDADE_PEDIDO,
(SELECT SUM(100)
FROM DUAL
WHERE I.SEQUENCIAL_PEDIDO = 204144) QUANTIDADE_PESO
FROM PEDIDO I
WHERE I.SEQUENCIAL_PEDIDO IN (SELECT 204144 FROM DUAL)
GROUP BY I.SEQUENCIAL_PEDIDO
) V
WHERE V.QUANTIDADE_PESO = 0 --com hint rule funciona
;


Executando os comandos acima:

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 

Connected as AKIRA


SQL> 

SQL> CREATE TABLE PEDIDO (sequencial_pedido NUMBER, valor NUMBER);


Table created

SQL> INSERT INTO PEDIDO VALUES (204144, 1);


1 row inserted

SQL> COMMIT;


Commit complete

SQL> SELECT V.*

2 FROM (SELECT I.SEQUENCIAL_PEDIDO,

3 SUM(I.VALOR) QUANTIDADE_PEDIDO,

4 (SELECT SUM(100)

5 FROM DUAL

6 WHERE I.SEQUENCIAL_PEDIDO = 204144) QUANTIDADE_PESO

7 FROM PEDIDO I

8 WHERE I.SEQUENCIAL_PEDIDO IN (SELECT 204144 FROM DUAL)

9 GROUP BY I.SEQUENCIAL_PEDIDO

10 ) V

11 WHERE V.QUANTIDADE_PESO = 0 -- essa condição não funciona, quantidade_peso é 
100

12 ;


SEQUENCIAL_PEDIDO QUANTIDADE_PEDIDO QUANTIDADE_PESO

----------------- ----------------- ---------------

204144 1 100

SQL> SELECT /*+ RULE*/ V.*

2 FROM (SELECT I.SEQUENCIAL_PEDIDO,

3 SUM(I.VALOR) QUANTIDADE_PEDIDO,

4 (SELECT SUM(100)

5 FROM DUAL

6 WHERE I.SEQUENCIAL_PEDIDO = 204144) QUANTIDADE_PESO

7 FROM PEDIDO I

8 WHERE I.SEQUENCIAL_PEDIDO IN (SELECT 204144 FROM DUAL)

9 GROUP BY I.SEQUENCIAL_PEDIDO

10 ) V

11 WHERE V.QUANTIDADE_PESO = 0 --com hint rule funciona

12 ;


SEQUENCIAL_PEDIDO QUANTIDADE_PEDIDO QUANTIDADE_PESO

----------------- ----------------- ---------------


SQL>



Desde já agradeço, obrigado.

AKIRA




[As partes desta mensagem que não continham texto foram removidas]

Responder a