Geometrische typen kan op meerdere manieren worden ingevoerd.
-
In het eerste formulier, uw
?
parameters worden niet vervangen door waarden omdat ze letterlijke delen van een tekenreeks zijn. Er worden dus 0 parameters verwacht ... -
In het tweede formulier zonder enkele aanhalingstekens, uw
?
parameters worden vervangen, maar((18.9750,72.8258), 5)
wordt geïnterpreteerd als een rijtype dat niet werkt metcircle()
.
U probeert de geometrische functie circle()
dat kost een point
en een double precision
("middelpunt en straal tot cirkel"). Dit zijn geldige syntaxisvarianten:
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-viool.
De cast van ::text
is gewoon om de gestoorde weergave in SQL-viool te zuiveren
In uw geval, om numerieke waarden op te geven (geen letterlijke tekenreeks), gebruik de laatste vorm en het zou moeten werken:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle(point(?,?), ?);
Als wso2dss (waar ik geen ervaring mee heb) geen functies accepteert, moet je een van de eerste twee vormen gebruiken en een single opgeven parameter als letterlijke tekenreeks:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle ?;
... waarbij de parameter de aaneengeschakelde letterlijke waarde is zoals hierboven weergegeven.
Je zou laat Postgres de aaneenschakeling doen en geef nog steeds drie numerieke waarden door:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ ('(('::text || ? || ',' || ? || '),' || ? || ')')::circle;