Geometrische Typen kann auf mehrere Arten eingegeben werden.
-
Im ersten Formular Ihr
?
Parameter werden nicht durch Werte ersetzt, da sie wörtliche Teile einer Zeichenfolge sind. Es werden also 0 Parameter erwartet ... -
In der zweiten Form ohne einfache Anführungszeichen Ihr
?
Parameter werden ersetzt, aber((18.9750,72.8258), 5)
wird als Zeilentyp interpretiert, was mitcircle()
nicht funktioniert .
Sie versuchen, die geometrische Funktion Punkt
und eine doppelte Genauigkeit
("Zentrum und Radius zum Kreis"). Dies sind gültige Syntaxvarianten:
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-Fiddle.
Die Umwandlung in ::text
dient nur dazu, die gestörte Anzeige in SQL fiddle zu bereinigen
In Ihrem Fall, um numerische Werte bereitzustellen (kein String-Literal), verwenden Sie die letzte Form und es sollte funktionieren:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle(point(?,?), ?);
Wenn wso2dss (womit ich keine Erfahrung habe) keine Funktionen akzeptiert, müssen Sie eine der ersten beiden Formen verwenden und eine single angeben Parameter als String-Literal:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle ?;
... wobei der Parameter das oben angezeigte verkettete Literal ist.
Sie könnten Postgres die Verkettung durchführen lassen und trotzdem drei numerische Werte übergeben:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ ('(('::text || ? || ',' || ? || '),' || ? || ')')::circle;