PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

ERREUR :l'index de colonne est hors limites : 1, nombre de colonnes : 0

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 avec circle() .

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;