Vinicius escreveu:
> Evandro eu ja tentei desta forma mas dai tenho outro problema em POINT, me 
> retorna uma msg de erro qndo executo dizendo q nao existe POINT com 
> argumento numero,, mas estou passando string e nao numeric.
> 
> ----- Original Message ----- 
> From: "Evandro Ricardo Silvestre" <[EMAIL PROTECTED]>
> To: "Comunidade PostgreSQL Brasileira" <pgbr-geral@listas.postgresql.org.br>
> Sent: Tuesday, September 11, 2007 10:14 AM
> Subject: Re: [pgbr-geral] criando funcao
> 
> 
> Vinicius,
> 
> Você tem q concatenar em uma string e executá-la com EXECUTE.
> 
> Algo assim:
> 
> sSql := 'SELECT INTO RsDis cidade, estado, bairro, logradouro
>               FROM ' || cidades_pr || ' where .....
> EXECUTE sSql;
> 
> Essa é a unica forma de alterar a tabela que vai executar.
> 
> SDS
> 
> Evandro
> 
> Vinicius wrote:
>> Ola pessoal...
>>
>> Tenho uma funcao que preciso passar pro sql qual tabela quero usar,, mas 
>> nao
>> estou conseguindo fazer,, segue a funcao abaixo:
>>
>> onde esta "cidades_pr" qro substiruir pelo parametro "tabela"
>>
>> CREATE OR REPLACE FUNCTION "public"."pega_logradouro" (lat varchar, long
>> varchar, tabela varchar) RETURNS varchar AS
>> $body$
>> declare
>>   RsDis Record;
>> begin
>>
>>   SELECT INTO RsDis cidade, estado, bairro, logradouro
>>   FROM cidades_pr
>>   where
>>   Distance(the_geom, GeomFromText( 'POINT(' || $2 || ' ' || $1 ||
>> ')', -1 ))*1 = (select Distance(the_geom, GeomFromText( 'POINT(' || $2 || 
>> '
>> ' || $1 || ')', -1 ))*1 as dif from cidades_pr where Distance(the_geom,
>> GeomFromText( 'POINT(' || $2 || ' ' || $1 || ')', -1 ))*1 <= 0.3 order by
>> dif limit 1 )
>>   limit 1;
>>
>>         RETURN RsDis.cidade || ',' || RsDis.estado || ',' || RsDis.bairro 
>> ||
>> ',' || RsDis.logradouro;
>>
>> end;
>>


Veja "37.2.1. Handling of Quotation Marks" em:
http://www.postgresql.org/docs/8.2/interactive/plpgsql-development-tips.html
e EXECUTE em:
http://www.postgresql.org/docs/8.2/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

...
x := 'SELECT INTO RsDis cidade, estado, bairro, logradouro
   FROM cidades_pr
   WHERE
   Distance(the_geom, GeomFromText( ''POINT(' || $2 || ' ' || $1 || 
')'', -1 ))*1 = (SELECT Distance(the_geom, GeomFromText( ''POINT(' || $2 
|| ' ' || $1 || ')'', -1 ))*1 as dif FROM cidades_pr WHERE 
Distance(the_geom,
GeomFromText( ''POINT(' || $2 || ' ' || $1 || ')'', -1 ))*1 <= 0.3 ORDER BY
dif LIMIT 1 )
   LIMIT 1;';

EXECUTE x;
...

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

Responder a