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;