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;