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;