leomazzei 0 Denunciar post Postado Janeiro 23, 2009 Estou precisando criar uma procedure no banco para refazer a ordenação dos itens de uma nota, mais essa ordenação depende do parâmetro passado, Exemplo: na procedure a baixo eu tenho q passar o parâmetro "psOrdemNFe" ora como "a.seqitemdf" ora como "a.seqitemdf desc" ou até mesmo outra coluna como "b.desccompleta" CREATE OR REPLACE PROCEDURE sp_Ordena( psOrdemNFe in varchar2) IS Cursor c_ordemitem is select a.nroempresa, a.numerodf, a.seriedf, a.nroserieecf, a.seqpessoa, a.seqitemdf, a.seqproduto, b.desccompleta, a.tipotabela, a.tipnotafiscal from tab_nota a, tab_produto b where a.seqnotafiscal = 1 and a.seqproduto = b.seqproduto order by a.numerodf, psOrdemNFe , B.DESCCOMPLETA; vtblOrdem c_ordemitem%rowtype; vnCount INTEGER; BEGIN Open c_ordemitem; Loop Fetch c_ordemitem into vtblOrdem; exit when c_ordemitem%notfound; vnCount := vnCount + 1; update tab_nfitem a set seqnovaordem = vnCount where a.seqproduto = vtblOrdem.seqproduto and a.numeronf = vtblOrdem.numerodf ; end loop; close c_ordemitem; END sp_Ordena; O meu problema está quando tenho que passar em ordem descrente, pois da forma q está o oralce na ão esta reconecendo o parâmetro como coluna e sim como string, já tentei passar o parâmetro entre aspas mais não resolveu, alguem ai tem alguma solução para este caso? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Janeiro 23, 2009 Tente passar o parametro como numérico e com a ordem da coluna a ser passado no ORDER BY. Será preciso ordenar alguma alfa como DESC ? Compartilhar este post Link para o post Compartilhar em outros sites
leomazzei 0 Denunciar post Postado Janeiro 25, 2009 é o ruim é q hora a coluna 1 pode ser desc ora não Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Janeiro 25, 2009 Ou você usa dois cursores e um if , ou se o campo for numérico um parametro que multiplica o valor a ser ordenado por 1 ou -1 , esta 2@ é meio gambiarra o IF com 2 cursores é mais limpa. Outra solução seria montar o SQL de forma dinamica , nunca fiz com cursor. Não vejo outra solução, mas dá uma lida na documentação e veja se o ASC DESC pode ser variável em plsql. Compartilhar este post Link para o post Compartilhar em outros sites
leomazzei 0 Denunciar post Postado Janeiro 30, 2009 consegui dessa maneira criei a procedure e passo como parametro vsOrdemNFe pode ser vsOrdemNFe := ' a.seqitemdf desc ' ou vsOrdemNFe := ' a.seqitemdf desc ' vsSQL := 'select a.numerodf a.seqitemdf from tab_nota a, tab_produto b where a.seqnotafiscal = 1 and a.seqproduto = b.seqproduto order by a.numerodf, ' || vsOrdemNFe || ', B.DESCCOMPLETA '; open p_cursor for vsSQL ; loop Fetch p_cursor into vnNumeroDf, vnSeqItem; exit when p_cursor%notfound; vnCount := vnCount + 1; end loop; Compartilhar este post Link para o post Compartilhar em outros sites