[firebase-br] Order by vari?vel em SP

Rider of the storm sidoncd em gmail.com
Dom Maio 6 13:51:08 -03 2007


Estou desenvolvendo ums stored procedure onde a coluna para order by deverá 
ser passada via parametro, FB parece não aceitar assim:

order by <variável>

Como sei que é possível ordenar pelo numero da coluna, como abaixo:

order by 2

Tentei criar uma variavel inteira onde seu valor é o numero da coluna que o 
usuario deseja ordenar, order by ficou assim:

order by :posicao

Beleza, não ocorre erro, mas.. não funfa, alguem tem a solução para isto?

Abaixo vai a procedure real:

begin

  posicao = case ordem
    when 'numnf' then 2
    when 'emissao_nf' then 3
    when 'cliente' then 4
  end;

  for
    select
      rv.codigo_cliente,
      rv.numnf,
      rv.emissao_nf,
      cl.identificacao,
      rv.status,
      sum(total_icms) as total_icms,
      sum(total_nf) as total_nf,
      sum(ipi) as ipi,
      sum(comissao) as comissao,
      sum(total_iss) as total_iss
    from
      resumovendas rv left outer join clientes cl on
                            rv.codigo_cliente = cl.codigo_cliente

    where
      (rv.emissao_nf between :data_inicial and :data_final)
      and
      (rv.status=coalesce(:filtro_status,rv.status))

    group by
      rv.codigo_cliente,
      rv.numnf,
      rv.emissao_nf,
      cl.identificacao,
      rv.status

     order by :posicao

     /*  => Também não funciona
     order by (case ordem
       when 'numnf' then 2
       when 'emissao_nf' then 3
       when 'cliente' then 4
     end)
     */

    into
      :codigo_cliente,
      :num_nf,
      :emissao_nf,
      :razao_cliente,
      :status,
      :total_icms,
      :total_nf,
      :total_ipi,
      :total_comissao,
      :total_iss

    do
    begin
      suspend;
    end
    begin
      total_icms = posicao;
      suspend;
    end
end 







Mais detalhes sobre a lista de discussão lista