icjunior07 wrote:
> Fala galera, blz?
>
>
> Estou modificando uma funcao que eu tenho em meu banco , e preciso colocar 
> uma variavel que ira receber um
> resultado de select no qual o select tb tem variaveis.
> Mas ao executar a funcao, esta gerando erros das variaveis.
>
> Esta seria a variavel:
>
> tentei desta forma: 
>
> contagem_finalizada := 'select count(*) from '||var_mes||' where 
> majcajus=''11'' and majddaju='''||vdata||'''';
>   
Apenas uma dica, utilize o quote_literal para evitar tantos apostrofes, 
fica menos poluido o codigo.
EX: .... majddaju=' || quote_literal(vdata) || ' ....

> EXECUTE 'SELECT COUNT(*) INTO '||contagem_finalizada||' FROM '||var_mes||' 
> WHERE majcajus=''11'' and majddaju=
> '||vdata;
>   
Deixa eu ver se entendi, você está querendo pegar o valor do count(*) e 
jogar na variavel contagem_finalizada.

Até aonde eu saiba (não sei se já foi implementado em novas versões), 
não é possível utilizar um INTO dentro um EXECUTE, assim essa rotina sua 
nunca irá funcionar, como está fazendo.
Quando caiu nessa situação, utilizo um FOR para carregar o resultado da 
consulta em um cursor e dentro do FOR pego o resultado da consulta.
Utilize a primeira construção que você enviou e atribua a uma variavel 
do tipo varchar.
Faça assim:

vSql :='select count(*) as resultado from '||var_mes||' where 
majcajus=''11'' and majddaju=' || quote_literal(vdata);
FOR record IN EXECUTE vSql LOOP
    contagem_finalizada := record.resultado;
END LOOP;

Como é um count, o FOR terá apenas 1 loop.

Parece 'adaptação técnica', mas não sei se existe outra forma de fazer.

PS: sempre coloque a mensagem de erro que está obtendo para ajudar na 
solução do problema.

Att

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

Responder a