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?
>
> Osvaldo
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>   


-- 
Vinicius D. Barba
Totalsat - Departamento TI
(41) 2109-7716

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

Responder a