Jenis geometris dapat dimasukkan dalam berbagai cara.
-
Pada formulir pertama,
?
. Anda parameter tidak diganti dengan nilai karena mereka adalah bagian literal dari string. Jadi 0 parameter diharapkan ... -
Dalam bentuk kedua tanpa tanda kutip tunggal,
?
. Anda parameter diganti, tetapi((18.9750,72.8258), 5)
ditafsirkan sebagai tipe baris, yang tidak berfungsi dengancircle()
.
Anda mencoba menjalankan fungsi geometris circle()
yang mengambil point
dan double precision
("pusat dan jari-jari ke lingkaran"). Ini adalah varian sintaks yang valid:
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.
Pemeran ke ::text
hanya untuk membersihkan tampilan gila di biola SQL
Dalam kasus Anda, untuk memberikan nilai numerik (bukan literal string), gunakan formulir terakhir dan itu akan berfungsi:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle(point(?,?), ?);
Jika wso2dss (yang saya tidak punya pengalaman dengannya) tidak menerima fungsi, Anda harus menggunakan salah satu dari dua formulir pertama dan memberikan tunggal parameter sebagai string literal:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle ?;
... di mana parameternya adalah literal gabungan seperti yang ditampilkan di atas.
Anda bisa biarkan Postgres melakukan penggabungan dan tetap memberikan tiga nilai numerik:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ ('(('::text || ? || ',' || ? || '),' || ? || ')')::circle;