Help pessoal, alguém já viu algum caso parecido com esse? Onde campo=valor não funciona de jeito nenhum no select mais externo.
----- Original Message ----- From: Akira To: [email protected] Sent: Thursday, December 10, 2009 3:02 PM Subject: [oracle_br] Bug Select no 10.2.0.x 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]
