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;