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