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

Responder a