PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

ERRO:O índice da coluna está fora do intervalo:1, número de colunas:0


Tipos geométricos pode ser inserido de várias maneiras.

  • No primeiro formulário, seu ? os parâmetros não são substituídos por valores porque são partes literais de uma string. Portanto, 0 parâmetros são esperados ...

  • Na segunda forma sem aspas simples, seu ? parâmetros são substituídos, mas ((18.9750,72.8258), 5) é interpretado como um tipo de linha, que não funciona com circle() .

Você está tentando invocar a função geométrica circle() que recebe um point e uma double precision ("centro e raio ao círculo"). Estas são variantes de sintaxe válidas:
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

Fiddle SQL.
A conversão para ::text é apenas para higienizar a exibição desordenada no violino SQL

No seu caso, para fornecer valores numéricos (não um literal de string), use o último formulário e deve funcionar:
SELECT addressid, geocode
FROM   maddress
WHERE  geocode::point <@ circle(point(?,?), ?);

Se o wso2dss (com o qual não tenho experiência) não aceita funções, você deve usar um dos dois primeiros formulários e fornecer um único parâmetro como literal de string:
SELECT addressid, geocode
FROM   maddress
WHERE  geocode::point <@ circle ?;

... onde o parâmetro é o literal concatenado conforme exibido acima.

Você poderia deixe o Postgres fazer a concatenação e ainda passar três valores numéricos:
SELECT addressid, geocode
FROM   maddress
WHERE  geocode::point <@ ('(('::text || ? || ',' || ? || '),' || ? || ')')::circle;