2010/10/27 Vinicius <[email protected]>: > E ai pessoal.. > > Tenho esta função > > CREATE OR REPLACE FUNCTION "public"."fc_zoom" (lat varchar [], long > varchar []) RETURNS integer AS > $body$ > DECLARE > dist Integer; > length Integer; > result Integer; > BEGIN > length := array_upper($1, 1); > > dist := 0; > result := 0; > > FOR i IN 1 .. length LOOP > select into dist (point(lat[0],long[0]) <-> > point(lat[i],long[i]))*100; > if dist > result then > result := dist; > end if; > END LOOP; > > return result; > > EXCEPTION WHEN RAISE_EXCEPTION THEN > return -1; > END; > $body$ > LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; > > estou tentando executa-la assim: > > select fc_zoom(ARRAY['-25.2356','-25.555'],ARRAY['-49.5689','-49.6666']); > > mas aparece este erro > > ERROR: function point(character varying, character varying) does not exist > LINE 1: select (point( $1 [0], $2 [0]) <-> point( $1 [ $3 ], $2 [ $3... > ^ > HINT: No function matches the given name and argument types. You might > need to add explicit type casts. > QUERY: select (point( $1 [0], $2 [0]) <-> point( $1 [ $3 ], $2 [ $3 ]))*100 > CONTEXT: PL/pgSQL function "fc_zoom" line 12 at SQL statement > >
De acordo com o manual [1] a função point, em seu contexto, é point(double precision, double precision) e você está passando varchar como parâmetro. Provavelmente o uso de cast solucionará seu problema. point(lat[0]::double precision,long[0]::double precision) Osvaldo [1] http://www.postgresql.org/docs/current/interactive/functions-geometry.html _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
