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;