Tipos geométricos se puede ingresar de varias maneras.
-
En la primera forma, su
?los parámetros no se reemplazan con valores porque son partes literales de una cadena. Entonces se esperan 0 parámetros... -
En la segunda forma sin comillas simples, su
?los parámetros se reemplazan, pero((18.9750,72.8258), 5)se interpreta como un tipo de fila, que no funciona concircle().
Está intentando invocar la función geométrica circle()
que toma un point y una double precision ("centro y radio del círculo"). Estas son variantes de sintaxis válidas:
SELECT circle '((18.9750,72.8258), 5)' AS cast_literal
' <(18.9750,72.82580),5>'::circle AS cast_literal2
, circle(point '(18.9750,72.8258)', '5') AS literal_point_n_radius
, circle(point(18.9750,72.8258), '5') AS point_n_literal_radius
, circle(point(18.9750,72.8258), 5) AS point_n_radius
violín SQL.
El elenco de ::text es solo para desinfectar la pantalla trastornada en SQL fiddle
En su caso, para proporcionar valores numéricos (no es una cadena literal), use la última forma y debería funcionar:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle(point(?,?), ?);
Si wso2dss (con el que no tengo experiencia) no acepta funciones, debe usar uno de los dos primeros formularios y proporcionar un único parámetro como cadena literal:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle ?;
... donde el parámetro es el literal concatenado como se muestra arriba.
podrías deje que Postgres haga la concatenación y aún pase tres valores numéricos:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ ('(('::text || ? || ',' || ? || '),' || ? || ')')::circle;