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

Responder a