Amigo,

Creio que você queira que o seu select traga as os registros que sigam as 
seguintes condições.

Condição 1. (DATA BETWEEN add_months(dat_data, -12) AND
             add_months(dat_data, 0) AND 
             a.ana10_n < 2)

Condição 2. (DATA BETWEEN add_months(dat_data, -24) AND 
             add_months(dat_data,-12) AND 
             a.ana10_n = 2)

Condição 3. (a.sequencia = 1)

Condição 4. (setor, fazenda, lote, talhao) NOT IN (SELECT setor, fazenda, lote, 
talhao
                                                   FROM ca_analisis_dig
                                                   WHERE DATA >= dat_data)
                                                   ORDER BY talhao DESC)

Ou seja:

select setor, fazenda, lote, talhao, DATA, a.ana10_n
from ca_analisis_dig a
where (condicao1 or condicao2) and condicao3 and condicao4

Estou certo?
Se for exatamente isso, segue o seu select corrigido.

DECLARE
        dat_data DATE := '01/01/2010';
BEGIN
        SELECT setor, fazenda, lote, talhao, DATA, a.ana10_n
        FROM ca_analisis_dig a
        WHERE (DATA BETWEEN add_months(dat_data, -12) AND
              add_months(dat_data, 0) AND 
              a.ana10_n < 2

              )  --Alteração 3

              OR 
              
              (  --Alteração 2

              DATA BETWEEN add_months(dat_data, -24) AND 
              add_months(dat_data,-12) AND 
              a.ana10_n = 2)
              
              AND a.sequencia = 1
              AND (setor, fazenda, lote, talhao) NOT IN (SELECT setor, fazenda, 
lote, talhao
                                                         FROM ca_analisis_dig
                                                         WHERE DATA >= dat_data)
                                                         ORDER BY talhao DESC;
END;


Foram apenas feitas 2 alterações que são a inclusão de um parêntese fechando 
antes do OR e um abrindo após o OR.

Espero ter ajudado.

Yuri Grangeiro
Email: ygrange...@gmail.com
MSN: ygrange...@hotmail.com
Twitter: @YuriGrangeiro
(85) 8133.1935
(85) 8615.2966


--- Em delphi-br@yahoogrupos.com.br, Murilo Cunha <mcscu...@...> escreveu
>
>   Pessoal,
> 
> Para aqueles q manjam de SQL.
> 
> Meu banco eh ORACLE e gostaria de criar uma variavel onde eu guardo o 
> valor de uma DATA.
> Esta minha variavel seria utilizada em varias partes de meu SELECT.
> Eu quero mais ou menos isso:
> 
> DECLARE
>     dat_data DATE := '01/01/2010';
> BEGIN
>    SELECT setor, fazenda, lote, talhao, DATA, a.ana10_n
>    FROM ca_analisis_dig a
>    WHERE (DATA BETWEEN add_months(dat_data, -12) AND 
> add_months(dat_data,   0) AND a.ana10_n < 2
>      OR  DATA BETWEEN add_months(dat_data, -24) AND add_months(dat_data, 
> -12) AND a.ana10_n = 2)
>     AND a.sequencia = 1
>     AND (setor, fazenda, lote, talhao) NOT IN (SELECT setor, fazenda, 
> lote, talhao
>                                                  FROM ca_analisis_dig
>                                                 WHERE DATA >= dat_data)
>   ORDER BY talhao DESC;
> END;
> 
> 
> 
> Estou rodando estas instrucoes em PL/SQL
> Mas nao consigo executar este SELECT
> Onde estah o erro?
> O que estah faltando?
> Qual a sugestao dos senhores para este caso?
> 
> 
> 
> 
> Obrigado
> MuriloCunha
>


Reply via email to