On Nov 29, 2007 9:54 AM, Jacques Nogueira dos Santos
<[EMAIL PROTECTED]> wrote:
>
> Pessoal estou com problemas para chamar essa function.
> A function é criada, o que acontece é que não consigo chama-la para
> execução.
A unica coisa que sua funcao faz e' criar o rownum, como no Oracle. Ao
inves disso, criei uma solucao que nao exige funcao, e que funcionara'
para qualquer tabela (vou colocar no meu blog depois):
CREATE SEQUENCE _rownum;
SELECT
nextval('_rownum') % _seq.curr AS rownum,
trim(lower(mneu_for)) AS mneu_for
trim(nome_for) AS nome_for
FROM
sbd95.fornec,
(SELECT nextval('rownum') AS next, currval('_rownum') AS curr) _seq;
Nao importa o valor atual da sequencia _rownum (coloquei o "_" como
prefixo para evitar colisoes) pois uma operacao modulo e' realizada.
Como sequencias tem garantia de atomicidade no PostgreSQL, essa
solucao deve funcionar, creio eu, sem problemas de race conditions.
A chamada para nextval dentro da subconsulta e' necessaria, pois nao
se pode garantir que o valor da sequencia ja' tenha sido chamado
naquela sessao.
Funcionou nos meus testes aqui. Podes colocar isso numa VIEW por
exemplo. Um pouco feio, mas simples, e funciona.
-Roberto
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral