Pular para o conteúdo
  • Este tópico contém 8 respostas, 4 vozes e foi atualizado pela última vez 18 anos, 1 mês atrás por chduarte.
Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • #77810
    Anônimo

      Tem com fazer algo do tipo:

      select *
      from MinhaTabela mp
      where
      if v_nr_cliente != 0 then
      mp.nr_cliente = v_nr_cliente
      else
      mp.dt_atual = sysdate
      end if;

      grato.

      #77812
      spernega
      Participante

        Você pode tentar assim:

        select *
        from MinhaTabela mp
        where ((v_nr_cliente 0 and mp.nr_cliente = v_nr_cliente) or
        (v_nr_cliente = 0 and mp.dt_atual = sysdate ))

        #77814
        Anônimo

          já tentei isso, porem desta forma esta dando full table scan.
          já tentei com case tambem e é a mesma coisa, vc sabe me informar se existe algum tipo de macro-substituição no oracle ?
          grato por sua ajuda.

          #77815
          chduarte
          Participante

            Segue abaixo mas nao é aconselhavel.

            select *
            from MinhaTabela mp
            where
            decode(v_nr_cliente,0,mp.dt_atual,mp.nr_cliente) = decode(v_nr_cliente,0,sysdate,v_nr_cliente)

            Grande []

            #77817
            Anônimo

              tentei da forma que vc sugeriu porem retorna o seguinte erro:

              ORA-00932: inconsistent datatypes: expected DATE got NUMBER

              vc teria mais alguma sugestão ?

              grato.

              #77819
              chduarte
              Participante

                Verifique se os campos da query batem com os parametros.

                O campo “mp.dt_atual” ira procurar uma data. Aqui no caso o sysdate.
                O campo “mp.nr_cliente” ira procurar v_nr_cliente.

                Se ele achar campos diferentes aos valores passados voce ira receber este erro.

                Grande []

                #77821
                Anônimo

                  já verifiquei e a ordem do parametros estão ok.

                  acho que a funcão decode não aceita tipos de dados diferentes na mesma comparação.

                  grato.

                  #77823
                  passanha
                  Participante

                    Meu.. olha este ‘GATO’..

                    create table MinhaTabela (nr_cliente number,dt_atual date);
                    insert into MinhaTabela values (0,sysdate);
                    insert into MinhaTabela values (1,sysdate);
                    insert into MinhaTabela values (2,sysdate);
                    insert into MinhaTabela values (0,sysdate-30);
                    insert into MinhaTabela values (1,sysdate-30);
                    insert into MinhaTabela values (2,sysdate-30);

                    define v_nr_cliente = ‘0’ number;
                    accept v_nr_cliente number PROMPT ‘NUM.CLIENTE: ‘;

                    select *
                    from MinhaTabela mp
                    where(&v_nr_cliente != 0 and &v_nr_cliente = mp.nr_cliente) or
                    (&v_nr_cliente = 0 and to_date(mp.dt_atual,’DD/MM/YYYY’) = to_date(sysdate,’DD/MM/YYYY’))
                    /

                    Resultado…

                    v_nr_cliente = 0

                    SQL> accept v_nr_cliente number PROMPT ‘NUM.CLIENTE: ‘;
                    NUM.CLIENTE: 0

                    NR_CLIENTE DT_ATUAL


                         0 28/12/06
                         1 28/12/06
                         2 28/12/06
                    

                    v_nr_cliente = 1

                    SQL> accept v_nr_cliente number PROMPT ‘NUM.CLIENTE: ‘;
                    NUM.CLIENTE: 1

                    NR_CLIENTE DT_ATUAL


                         1 28/12/06
                         1 28/11/06
                    
                    #77825
                    chduarte
                    Participante

                      Tente este:

                      select *
                      from MinhaTabela mp
                      where
                      decode(v_nr_cliente,0,to_char(mp.dt_atual,’dd/mm/yy’),mp.nr_cliente) = decode(v_nr_cliente,0,to_char(sysdate,’dd/mm/yy’),v_nr_cliente).

                      Ele tem que achar os mesmos tipos de dados.

                      Grande []

                    Visualizando 9 posts - 1 até 9 (de 9 do total)
                    • Você deve fazer login para responder a este tópico.
                    plugins premium WordPress