Geometrické typy lze zadat několika způsoby.
-
V prvním formuláři vaše
?parametry nejsou nahrazeny hodnotami, protože jsou doslovnými částmi řetězce. Očekává se tedy 0 parametrů ... -
Ve druhém tvaru bez jednoduchých uvozovek vaše
?parametry jsou nahrazeny, ale((18.9750,72.8258), 5)je interpretován jako typ řádku, který nefunguje scircle().
Pokoušíte se vyvolat geometrickou funkci circle()
který zabere point a double precision ("střed a poloměr kruhu"). Toto jsou platné varianty syntaxe:
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
Hudly SQL.
Odeslání do ::text je jen dezinfikovat vyšinutý displej v SQL housle
Ve vašem případě zadejte číselné hodnoty (nikoli řetězcový literál), použijte poslední formu a mělo by to fungovat:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle(point(?,?), ?);
Pokud wso2dss (se kterým nemám zkušenosti) nepřijímá funkce, musíte použít jeden z prvních dvou formulářů a poskytnout single parametr jako řetězcový literál:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle ?;
... kde parametr je zřetězený literál, jak je zobrazeno výše.
Mohli byste nechat Postgres provést zřetězení a přesto předat tři číselné hodnoty:
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ ('(('::text || ? || ',' || ? || '),' || ? || ')')::circle;