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