Em 9 de março de 2010 18:21, flavio <[email protected]> escreveu:
> Creio que seu comando esteja incompleto, talvez seja algo do tipo:
>
> EXECUTE
>   'SELECT ' || quote_ident(nome_campo) || ' FROM ' ||
> quote_ident(sua_tabela) || ' WHERE '  || quote_ident (seu_campo) || '
> = ' || quote_literal(valor)
> INTO valor_rec;
>
> repare que é
> EXECUTE
>   'string com o comando a ser executado'
>
> Osvaldo

> Eu faço uma consulta com FOR LOOP
>                        FOR mov_rec IN
>                                EXECUTE ''SELECT * ''
>                                        || '' FROM ''
>                                        || contratos_fat_rec.nome_tabela_1
>                                        || '' WHERE id_contrato = ''
>                                        || contratos_fat_rec.id_contrato
>                        LOOP
>
> O problema é que eu preciso pegar os valores retornados cujo nome eu tenho que
> montar dentro de outro loop em um array que contem os nomes dos campos para o 
> record 'mov_rec'.
>
> mov_rec + nome_campo_array
>
> Assim:
>
> mov_rec.id_contrato
> mov_rec.ticket
> mov_rec.veiculo
> ...
>
> para pegar o valor eu posso usar
>
> select mov_rec.id_contrato into valor;
>
> O problema é que a parte 'id_contrato' vem do loop no array com os nomes, 
> então o que eu tinha achado
> no manual era o comando EXECUTE para fazer o comando dinamico.
> Por isso eu estou tentando assim:
>
> EXECUTE ''select mov_rec'' || ''.'' || nome_campo_array INTO valor_rec;
>
> mas parece que dentro do EXECUTE nao é reconhecido o 'mov_rec', é a impressao 
> que dá...
> Talvez tenha outra maneira de pegar os valores mas nao encontrei.
>
> Não sei se me expressei bem, mas obrigado pela atenção, se tiver mais alguma 
> dica...


Não está claro o que você deseja.
Quando você coloca:
select mov_rec.id_contrato into valor;
você está fazendo apenas uma atribuição que poderia ser feita simplesmente:
valor := mov_rec.id_contrato;

Aí você fala de um array mas o comando que você apresenta não tem
nenhum subscrito. Talvez:
EXECUTE 'SELECT mov_rec.' || nome_campo_array[i] INTO valor_rec;
supondo que  nome_campo_array[i] contenha o nome do campo do qual você
deseja obter o valor, por ex. id_contrato. É isso?

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a