Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #83906
    Anônimo

      Pessoal,

      Seguinte, tô com outro problema aqui. Então, como eu faço um select receber os dados selecionados em uma tela dinamicamente? porque o usuário pode escolher todos os dados na tela ou somente um ou dois, sendo que na tela existe 11 opções, ou seja, 11 parâmetros que o select irá receber na cláusula WHERE, mas nem sempre ele irá escolher os 11, quatro são obrigatório o restante ele pode escolher ou não….tem uma idéia aí?

      #83909
      Avatar photoLeonardo Litz
      Participante

        Voce tem que utilizar um cursor dinamico. Neste cursor será executado o select que será uma variavel. Nesta variavel voce pode concatenar as clausulas que seu usuario escolheu o nao.

        #83914
        Avatar photoLeonardo Litz
        Participante

          Segue um exemplo:

          —Aqui vc guarda a query toda
          VSQL := ‘select r.resnot_num_nf,
          r.resnot_ser_nf,
          to_date(r.resnot_dta_nf,”yyyy/mm/dd”),
          substr(lpad(r.sauftmes_hora,6,0),1,2)||”:”||substr(lpad(r.sauftmes_hora,6,0),3,2)||”:”||substr(lpad(r.sauftmes_hora,6,0),5,2),
          f.descr_resumida,
          v.ficv_num,
          s.saucad_pais_chassi || s.saucad_chassi3 || s.saucad_chassi,
          decode(trim(l.mensagem),”BAIXA EFETUADA”,”BAIXA EFETUADA”,”ERRO”),
          l.data,
          l.arquivo,
          r.resnot_cod_reg,
          trunc(r.sw_criacao)
          from resnot r,
          fichavv v,
          saucads s,
          tb_logimportsincro l,
          tb_filial f
          where s.saucad_pais_chassi||s.saucad_chassi3||s.saucad_chassi = r.sauftmes_pais_chassi || r.sauftmes_chassi3 || r.sauftmes_let_chassi ||r.sauftmes_num_chassi
          and l.chassi = s.saucad_pais_chassi||s.saucad_chassi3||s.saucad_chassi
          and s.saucad_num_ficha_venda = v.ficv_num
          and f.codfilial_cb = s.saucad_firma_origem
          and r.resnot_dpto = ”SAU”
          and r.sauftmes_veic_n_u = ”N”’;

                  ---- Conforme o parametro passado vc irá verificar se deverá concatenar a clausula
          
                  ---- Filtro por filial
                  if pcd_filial  '0' then
          
                     vsql := vsql || ' and s.saucad_firma_origem =''' || lpad(pcd_filial, 2, 0) || '''';
          
                  end if;
          
                  ---- Filtro por mensagem
                  if ptx_mensagem = 'ERRO' then
          
                     vsql := vsql || ' and trim(l.mensagem)  ''BAIXA EFETUADA''';
          
                  elsif ptx_mensagem = 'BAIXA EFETUADA' then
          
                     vsql := vsql || ' and trim(l.mensagem) = ''BAIXA EFETUADA''';
          
                  end if;
          
                  ---- Periodo do movimento do tsa1
                  if (pdt_inicial_mov is not null) and (pdt_final_mov is not null) then
          
                     vsql := vsql || ' and l.data between ''' ||
                             to_date(pdt_inicial_mov, 'dd/mm/yyyy') || ''' and ''' ||
                             to_date(pdt_final_mov, 'dd/mm/yyyy') || '''';
          
                  end if;
          
                  ---Filtro por chassi      
                  if ptx_chassi is not null then
          
                     vsql := vsql ||
                             ' and s.saucad_pais_chassi || s.saucad_chassi3 || s.saucad_chassi like ''' ||
                             upper(ptx_chassi) || '%''';
          
                  end if;
          

          /*A execucao da query, detalhe que as variaveis devem ser declaradas na ordem da query:

          ou seja

          a variavel vcd_nota irá receber os valores da coluna r.resnot_num_nf do select

          a variavel vcd_serie irá receber os valores da coluna r.resnot_ser_nf do
          select.

          */

          OPEN CR_01 FOR VSQL;

               LOOP
          
                  FETCH CR_01
                     INTO vcd_nota, 
                             vcd_serie, 
                             vdt_emissao,     
                             vhr_emissao,          
                             vcd_filial,  
                             vnr_ficha, 
                             vcd_chassi,   
                             vtx_mensagem, 
                             vdt_movimentacao,  
                             vtx_arquivo, 
                              flag_cancelado, 
                              vdt_criacao;
          
                  EXIT WHEN CR_01%NOTFOUND;
          
                    dbms_output.put_line('Nota:'||vcd_nota||' serie:'||vcd_serie);
          
               end loop;
          

          —-Vc tambem pode declarar um variavel do tipo rowtype quando as colunas listadas forem apenas de uma tabela.
          ex:
          v_veiculo tb_veiculo%rowtype

          Espero ter ajudado, qualquer dúvida estou a disposicao.

          Vlw Leonardo Litz

          #83916
          Anônimo

            consegui fazer aqui, valeu brother!

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