Em 29 de dezembro de 2011 10:52, Jairo <[email protected]> escreveu:

> Pessoal por gentileza uma ajuda com select com order by e case****
>
> ** **
>
> Estou tentando utilizar em uma Function um order by usando case  conforme
> abaixo ****
>
> Porem não estou conseguindo utilizar o Desc ou Asc.****
>
> Observação Se não utiliza-lo  funciona perfeitamente****
>
> ** **
>
> <corte>
>
>
Eu utilizaria um SQL Dinâmico [1] [2], como por exemplo:

CREATE OR REPLACE FUNCTION vrj.pkg_teste
(
--- PARÂMETROS
--- I/O NOME                           TIPO
--- *** ******************************
*************************************************
        refcursor,
     IN  p_ordem                        VARCHAR(1)
)
RETURNS refcursor AS
$BODY$
DECLARE
  strSQL TEXT;
BEGIN

  strSQL := '
    SELECT
        pvd.id_pedido_venda,
        pvd.cd_cliente,
        pvd.nr_pedido
    FROM
       vrj.tb_pedido_venda AS pvd
    ORDER BY ';

  IF UPPER(p_ordem) = 'C' THEN
    strSQL := strSQL || 'pvd.cd_cliente ASC , pvd.nr_pedido ASC';
  ELSE
    strSQL := strSQL || 'pvd.nr_pedido DESC, pvd.cd_cliente ASC';
  END IF;

  OPEN $1 FOR EXECUTE strSQL;

  RETURN $1;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

SELECT vrj.pkg_teste('dados','D');
FETCH ALL In dados;


Não testei, mas é bem provável que funcione.

[1]
http://www.postgresql.org/docs/current/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN
[2] http://www.postgresql.org/docs/current/interactive/plpgsql-cursors.html

-- 
Fabrízio de Royes Mello
Consultoria/Coaching PostgreSQL
>> Blog sobre TI: http://fabriziomello.blogspot.com
>> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
>> Twitter: http://twitter.com/fabriziomello
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a