No debiste usar SELECT , aunque podias usando la clausula INTO. DEbiste hacerlo 
de esta forma
x:=(acos(sin(radians(LATITUD_1)) * sin(radians(LATITUD_2)) + 
    cos(radians(LATITUD_1)) * cos(radians(LATITUD_2)) * 
    cos(radians(LONGITUD_1) - radians(LONGITUD_2))) * 6378) ;
    RETURN x;
De la forma en que lo hicste hubiese funcionado si hubieras usado una funcion 
SQL y no plsql
*-------------------------------------------------------* 
*-Edwin Quijada 
*-Developer DataBase 
*-JQ Microsistemas 

*-Soporte PostgreSQL

*-www.jqmicrosistemas.com
*-809-849-8087
*-------------------------------------------------------*



Date: Fri, 12 Aug 2011 11:58:36 -0430
Subject: [pgsql-es-ayuda] ayuda con función
From: mavi...@gmail.com
To: pgsql-es-ayuda@postgresql.org

Buen día Lista!!!
Agregué una función en mi base de datos para calcular la distancia entre dos 
puntos, se ejecuta bien para efectos de agregarse como función, pero al momento 
de utilizarla me da un error, me pueden ayudar a saber por qué? qué es lo que 
estoy haciendo mal???

Esta es la función:

-- Function: calculo_distancia(numeric, numeric, numeric, numeric)

-- DROP FUNCTION calculo_distancia(numeric, numeric, numeric, numeric);

CREATE OR REPLACE FUNCTION calculo_distancia(numeric, numeric, numeric, numeric)

  RETURNS integer AS
$BODY$
DECLARE LATITUD_1 ALIAS FOR $1;
        LONGITUD_1 ALIAS FOR $2;
        LATITUD_2 ALIAS FOR $3;
        LONGITUD_2 ALIAS FOR $4;
      
        
BEGIN
    SELECT (acos(sin(radians(LATITUD_1)) * sin(radians(LATITUD_2)) + 

    cos(radians(LATITUD_1)) * cos(radians(LATITUD_2)) * 
    cos(radians(LONGITUD_1) - radians(LONGITUD_2))) * 6378) as resultado;
    RETURN resultado;
    
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE

  COST 100;
ALTER FUNCTION calculo_distancia(numeric, numeric, numeric, numeric) OWNER TO 
local;


Esta la ejecución:

select calculo_distancia(10.4997432, -66.8745939, 10.4830856, -66.8614196)

Este el error que me lanza la ejecución:


ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function "calculo_distancia" line 8 at SQL statement


********** Error **********

ERROR: query has no destination for result data
SQL state: 42601
Hint: If you want to discard the results of a SELECT, use PERFORM instead.
Context: PL/pgSQL function "calculo_distancia" line 8 at SQL statement




Gracias por su ayuda!!

-------------------------------------------
Virginia B.
-------------------------------------------
                                          

Responder a