Geometriske typer kan indtastes på flere måder.
-
I den første formular, din
?
parametre erstattes ikke med værdier, fordi de er bogstavelige dele af en streng. Så 0 parametre forventes ... -
I den anden form uden enkelte anførselstegn, din
?
parametre erstattes, men((18.9750,72.8258), 5)
tolkes til at være en rækketype, som ikke virker medcircle()
.
Du forsøger at påkalde den geometriske funktion circle()
der tager et point
og en double precision
("center og radius til cirkel"). Disse er gyldige syntaksvarianter:
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 violin.
Castet til ::text
er bare for at rense den forvirrede visning i SQL violin
I dit tilfælde for at angive numeriske værdier (ikke en streng bogstavelig), brug den sidste form, og den burde virke:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle(point(?,?), ?);
Hvis wso2dss (som jeg ikke har erfaring med) ikke accepterer funktioner, skal du bruge en af de to første formularer og give en enkelt parameter som streng literal:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle ?;
... hvor parameteren er den sammenkædede literal som vist ovenfor.
Du kunne lad Postgres udføre sammenkædningen og stadig sende tre numeriske værdier:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ ('(('::text || ? || ',' || ? || '),' || ? || ')')::circle;