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;