- Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 17 anos, 3 meses atrás por
Anônimo.
-
AutorPosts
-
21 de novembro de 2008 às 9:26 pm #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í?
21 de novembro de 2008 às 9:34 pm #83909Leonardo Litz
ParticipanteVoce 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.
22 de novembro de 2008 às 5:18 am #83914Leonardo Litz
ParticipanteSegue 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%rowtypeEspero ter ajudado, qualquer dúvida estou a disposicao.
Vlw Leonardo Litz
24 de novembro de 2008 às 3:25 pm #83916Anônimo
consegui fazer aqui, valeu brother!
-
AutorPosts
- Você deve fazer login para responder a este tópico.