Tipos geométricos pode ser inserido de várias maneiras.
-
No primeiro formulário, seu?
os parâmetros não são substituídos por valores porque são partes literais de uma string. Portanto, 0 parâmetros são esperados ...
-
Na segunda forma sem aspas simples, seu?
parâmetros são substituídos, mas((18.9750,72.8258), 5)
é interpretado como um tipo de linha, que não funciona comcircle()
.
Você está tentando invocar a função geométrica
circle()
que recebe um point
e uma double precision
("centro e raio ao círculo"). Estas são variantes de sintaxe 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
Fiddle SQL.
A conversão para
::text
é apenas para higienizar a exibição desordenada no violino SQL No seu caso, para fornecer valores numéricos (não um literal de string), use o último formulário e deve funcionar:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle(point(?,?), ?);
Se o wso2dss (com o qual não tenho experiência) não aceita funções, você deve usar um dos dois primeiros formulários e fornecer um único parâmetro como literal de string:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle ?;
... onde o parâmetro é o literal concatenado conforme exibido acima.
Você poderia deixe o Postgres fazer a concatenação e ainda passar três valores numéricos:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ ('(('::text || ? || ',' || ? || '),' || ? || ')')::circle;