Geometriska typer kan matas in på flera sätt.
-
I det första formuläret, din
?parametrar ersätts inte med värden eftersom de är bokstavliga delar av en sträng. Så 0 parametrar förväntas ... -
I den andra formen utan enstaka citattecken, din
?parametrar ersätts, men((18.9750,72.8258), 5)tolkas som en radtyp som inte fungerar medcircle().
Du försöker anropa den geometriska funktionen circle()
som tar en point och en double precision ("centrum och radie till cirkel"). Dessa är giltiga syntaxvarianter:
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
SQL-fiol.
Casten till ::text är bara att sanera den förvirrade displayen i SQL-fiol
I ditt fall för att ange numeriska värden (inte en bokstavlig sträng), använd den sista formen och det borde fungera:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle(point(?,?), ?);
Om wso2dss (som jag inte har någon erfarenhet av) inte accepterar funktioner måste du använda en av de två första formerna och tillhandahålla en enkel parameter som sträng bokstavlig:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle ?;
... där parametern är den sammanlänkade literalen som visas ovan.
Du kunde låt Postgres göra sammanlänkningen och ändå skicka tre numeriska värden:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ ('(('::text || ? || ',' || ? || '),' || ? || ')')::circle;