2009/4/10 Vinicius <[email protected]>: > Quando eu executo a funcao com este sql td funciona > > P_COORDENADA ALIAS FOR $1; */*parametro do tipo POINT */* > > RsDis float; > > SELECT INTO RsDis cast((P_COORDENADA<->CIDADE.COORDENADA)*100 as > float) AS MINDIS > > from CIDADE > > where cidade.id_class_group = $2 > > order by 1 > > limit 1; > > O que preciso fazer é ter um tipo point criado apartir de latitude > varchar e longitude varchar, pois preciso passar estes 2 parametros como > string. > Por isso que coloquei o sql dentro de uma variavel para que eu possa > montar o sql conforme os parametros que eu recebo. > > *Tentei desta outra forma tbm: > > * qry := 'SELECT cast((POINT(' || $2 || ' ' || $1 || ') > <->CIDADE.COORDENADA)*100 as float) AS MINDIS > > from CIDADE > > where cidade.id_class_group = ' || idClass || > ' and cidade.'||$5||' = 1 order by 1 limit 1;'; > * > ERROR: function point(numeric) does not exist at character 14 > HINT: No function matches the given name and argument types. You may > need to add explicit type casts. > QUERY: SELECT cast((POINT(-49.000 -25.000) <->CIDADE.COORDENADA)*100 as > float) AS MINDIS > * > > Osvaldo Kussama wrote: >> 2009/4/9 Osvaldo Kussama <[email protected]>: >> >>> 2009/4/9 Osvaldo Kussama <[email protected]>: >>> >>>> 2009/4/9 Vinicius <[email protected]>: >>>> >>>>> ja tentei com a virgula tbm e nao funcionou. Na funcao que esta >>>>> funcionando tbm nao tem a virgula >>>>> >>>>> Osvaldo Kussama wrote: >>>>> >>>>>> 2009/4/9 Vinicius <[email protected]>: >>>>>> >>>>>> >>>>>>> Ola pessoal estou tendo um problema em uma query. >>>>>>> >>>>>>> $2 = longitude varchar >>>>>>> $1 = latitude varchar >>>>>>> >>>>>>> qry := 'SELECT cast((''POINT(' || $2 || ' ' || $1 || ')'' >>>>>>> <->CIDADE.COORDENADA)*100 as float) AS MINDIS >>>>>>> from CIDADE >>>>>>> where cidade.id_class_group = ' || idClass || >>>>>>> ' and cidade.'||$5||' = 1 order by 1 limit 1;'; >>>>>>> >>>>>>> execute qry into RsDis; >>>>>>> >>>>>>> _*ERRO:*_ >>>>>>> invalid input syntax for type point: "POINT(-49.000 -25.000)" >>>>>>> >>>>>>> Nao sei pq este erro, pois tenho uma outra funcao que utilizo o POINT da >>>>>>> mesma forma e esta funcionando, *a funcao OK esta abaixo:* >>>>>>> >>>>>>> x := 'SELECT logradouro, bairro, cidade, estado, num_inicio, num_fim, >>>>>>> >>>>>>> distance( the_geom, GeomFromText( ''POINT(' || $2 || ' ' || $1 || >>>>>>> ')'', -1 ) ) as dif FROM mapas.'||$3||' >>>>>>> >>>>>>> WHERE distance( the_geom, GeomFromText( ''POINT(' || $2 || ' ' || >>>>>>> $1 || ')'', -1 ) ) <= 0.007 and logradouro is not null >>>>>>> >>>>>>> order by dif >>>>>>> >>>>>>> limit 1;'; >>>>>>> >>>>>>> -- >>>>>>> >>>>>>> >>>>>> Creio que faltou uma vírgula, segundo o manual deveria ser: >>>>>> POINT(-49.000, -25.000) >>>>>> ou seja: >>>>>> qry := 'SELECT cast((''POINT(' || $2 || ', ' || $1 || ')'' ... >>>>>> >>>>>> >>>> Você tem certeza que POINT(x, y) deve estar entre ' (plica ou apóstrofo)? >>>> >>>> >>> Complementando: me parece que GeomFromText é uma função definida por >>> você (UDF) e portanto o parâmetro 'POINT(x y)' é uma string tratada >>> pela função. >>> >>> >> >> >> Falha nossa. Me parece que você está usando PostGIS, de acordo com a >> query que você afirma funcionar. >> >> Neste caso você não deveria utilizar as funções do PostGIS e não as >> funções e operadores geométricos? >>
Creio que não fui claro na mensagem anterior: - 'POINT( x y)' é do PostGIS, uma extensão espacial do PostgreSQL [1]; - point '(x,y)' e point(x, y) são parte integrante do PostgreSQL (veja na documentação "Tipos de dado geométricos" [2] e "Funções e operadores geométricos" [3]). São coisas diferentes e, creio, você esteja misturando. [1] http://www.webgis.com.br/postgis/ [2] http://pgdocptbr.sourceforge.net/pg80/datatype-geometric.html [3] http://pgdocptbr.sourceforge.net/pg80/functions-geometry.html Osvaldo _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
