Em 01/11/08, tetraetila(R)<[EMAIL PROTECTED]> escreveu:
> ----- Original Message -----
> From: "Osvaldo Kussama" <[EMAIL PROTECTED]>
>
>> Não deu para entender o que você quer fazer.
>> Vejamos:
>> - innermyst é uma string que contém o comando SQL que você desja executar.
>> - myrec é um record contendo todos os campos resultantes da junção da
>> - tabela $1 com a tabela pgrowlocks.
>> - você concatena a string com o record (sinceramente não sei qual o
>> resultado) e tenta executar?
>
> Osvaldo
> _______________________________________________
>
> Nem eu?   : - )
>
> Caro Osvaldo
>
> Ela precisa me retornar o resultado como se eu tivesse feito este select:
>
> select * FROM a003.a003015_tbl as a, pgrowlocks('a003.a003015_tbl') AS p
> WHERE p.locked_row = a.ctid order by sr_recno;
>
> Ao invés dele passo a usar: select colunas( 'a003.a003015_tbl' );
>


Para fazer exatamente oque o SELECT acima faz, mas passando a tabela,
teste a função:

CREATE OR REPLACE FUNCTION colunas(text)
   RETURNS SETOF record AS
$$
 DECLARE
   myrec RECORD;
   myst TEXT;
 BEGIN
   myst = 'select * FROM ' || $1 ||
          ' as a, pgrowlocks(' || quote_literal($1) ||
          ') AS p WHERE p.locked_row = a.ctid order by sr_recno';
   FOR myrec IN EXECUTE myst LOOP
        RETURN NEXT myrec;
   END LOOP;
   RETURN;
 END;
$$ LANGUAGE 'plpgsql' VOLATILE STRICT;

Para usar utilize:
SELECT * FROM colunas('sua_tabela') AS foo(lista de tipo de campos de
sua_tabela + lista de tipo de campos de pg_rowlocks);

Osvaldo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a