Types géométriques peut être saisie de plusieurs façons.
-
Dans le premier formulaire, votre
?
les paramètres ne sont pas remplacés par des valeurs car ce sont des parties littérales d'une chaîne. Donc 0 paramètres sont attendus... -
Dans la deuxième forme sans guillemets simples, votre
?
les paramètres sont remplacés, mais((18.9750,72.8258), 5)
est interprété comme étant un type de ligne, ce qui ne fonctionne pas aveccircle()
.
Vous essayez d'invoquer la fonction géométrique circle()
qui prend un point
et une double precision
("centre et rayon du cercle"). Voici des variantes de syntaxe valides :
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
Violon SQL.
Le cast en ::text
est juste pour assainir l'affichage dérangé dans le violon SQL
Dans votre cas, pour fournir des valeurs numériques (pas un littéral de chaîne), utilisez la dernière forme et cela devrait fonctionner :
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle(point(?,?), ?);
Si wso2dss (dont je n'ai aucune expérience) n'accepte pas les fonctions, vous devez utiliser l'un des deux premiers formulaires et fournir un single paramètre sous forme de chaîne littérale :
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ circle ?;
... où le paramètre est le littéral concaténé comme affiché ci-dessus.
Vous pourriez laissez Postgres faire la concaténation et passez toujours trois valeurs numériques :
SELECT addressid, geocode
FROM maddress
WHERE geocode::point <@ ('(('::text || ? || ',' || ? || '),' || ? || ')')::circle;