Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

leomazzei

[Resolvido] Order by como Parâmetro ou Variável

Recommended Posts

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.