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]

Responder a