Tipi geometrici può essere inserito in più modi.
-
Nella prima forma, il tuo
?
i parametri non vengono sostituiti con valori perché sono parti letterali di una stringa. Quindi sono previsti 0 parametri ... -
Nella seconda forma senza virgolette singole, il tuo
?
i parametri vengono sostituiti, ma((18.9750,72.8258), 5)
viene interpretato come un tipo di riga, che non funziona concircle()
.
Stai tentando di invocare la funzione geometrica circle()
che prende un point
e una double precision
("centro e raggio al cerchio"). Queste sono varianti di sintassi valide:
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
Fiddle SQL.
Il cast di ::text
è solo per disinfettare il display squilibrato in SQL fiddle
Nel tuo caso, per fornire valori numerici (non una stringa letterale), usa l'ultimo modulo e dovrebbe funzionare:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle(point(?,?), ?);
Se wso2dss (con cui non ho esperienza) non accetta funzioni, devi utilizzare uno dei primi due moduli e fornire un singolo parametro come stringa letterale:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle ?;
... dove il parametro è il letterale concatenato come mostrato sopra.
Potresti lascia che Postgres esegua la concatenazione e passi comunque tre valori numerici:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ ('(('::text || ? || ',' || ? || '),' || ? || ')')::circle;