2015-01-08 10:16 GMT-02:00 Sebastian Webber <sebastian...@gmail.com>:

> 2015-01-08 8:28 GMT-02:00 Matheus de Oliveira <matioli.math...@gmail.com>:
>
>> Nossa cara, desculpe, mas por favor não faça isso. Criar uma "sequence"
>> (mesmo temporária) para ter algo que uma simples WINDOW FUNCTION row_number
>> (o mesmo do seu "alias") já faz, me parece péssimo, além disso para array o
>> generate_subscripts já resolve, você viu a solução que eu propus?
>>
>
> Vi agora. =\
>
> Todo caso a idéia de propor a solução ruim era forçar alguma alma caridosa
> a pensar em algo melhor. :P
>
>
Eu já pensei em algo, dá uma olhada:

CREATE OR REPLACE FUNCTION fordena_sql(int[])
RETURNS TABLE (item int, ordem int) AS
$$
SELECT unnest($1) as item, generate_series(1,array_length($1,1)) as ordem ;
$$ LANGUAGE 'sql';



SELECT foo.id, foo.name, fordena_sql.ordem FROM foo,
fordena_sql(ARRAY[1,5,20,12])
WHERE foo.id = fordena_sql.item
ORDER BY fordena_sql.ordem;

e o resultado:

postgres=# SELECT foo.id, foo.name, fordena_sql.ordem FROM foo,
fordena_sql(ARRAY[1,5,20,12])
postgres-# WHERE foo.id = fordena_sql.item
ORDER BY fordena_sql.ordem;WHERE foo.id = fordena_sql.item
postgres-# ORDER BY fordena_sql.ordem;ORDER BY fordena_sql.ordem;
 id |  name   | ordem
----+---------+-------
  1 | name 1  |     1
  5 | name 5  |     2
 20 | name 20 |     3
 12 | name 12 |     4
(4 rows)

a parte legal é agora nem precisa de pl/pgsql! :D

-- 
Sebastian Webber
http://swebber.me
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a