Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/01/2014, 09:51
zaphiel
 
Fecha de Ingreso: diciembre-2013
Ubicación: Zaragoza
Mensajes: 7
Antigüedad: 10 años, 10 meses
Puntos: 0
Pronlema con funcion a la hora de devolver datos.

Buenas compañeros.

Tengo una funcion en la que quiero calcular el Indice Medio de Masa Corporal de todos los jugadores de una base de datos.

Para ello en un ejercicio previo he calculado el ICM de un jugador(pasandolo como parametro) llamando a unas funciones previas para que lo haga.

Ahora tengo el problema de que al usar un cursor, no se como devolver los datos, ya que no se que colocar en el return.

Os paso los codigos:

Código:
CREATE OR REPLACE FUNCTION MediaICM2
RETURN NUMBER
IS
   
    CURSOR icmjugadores IS
    SELECT peso,altura  from jugadores;
BEGIN
  FOR registros_icm in icmjugadores
  LOOP
    DBMS_OUTPUT.PUT_LINE(PesoKilos(registros_icm.peso));
    DBMS_OUTPUT.PUT_LINE(AlturaMetros2(registros_icm.altura));
    DBMS_OUTPUT.PUT_LINE(CalcularIMC2(PesoKilos(registros_icm.peso),AlturaMetros2(registros_icm.altura)));
    
  END LOOP;


RETURN nosequeponer;
END MediaICM2;

Código:
-- FUNCION PASAR ALTURA DE PIES A METROS--
	create or replace FUNCTION AlturaMetros2
	(v_altura jugadores.altura%TYPE)
	RETURN NUMBER
	IS
	  v_altura2 number;
	  v_altura3 number;
	  v_pies_metros number;
	  v_pulgadas_centimetros number;
	  v_metros number(5,2);
	BEGIN
	  v_altura2:=substr(v_altura, 1, 1);
	  v_altura3:=substr(v_altura, 3);
	  v_pies_metros:=v_altura2*0.3048;
	  v_pulgadas_centimetros:=v_altura3*0.0254;
	  v_metros:=v_pies_metros+v_pulgadas_centimetros;
	RETURN v_metros;  
	END AlturaMetros2;
Código:
 --FUNCION CALCULAR ICM--
	CREATE OR REPLACE FUNCTION CalcularIMC2
	(v_peso NUMBER,v_altura NUMBER)
	RETURN NUMBER
	IS
	TOTAL NUMBER(5,2);
	BEGIN
	TOTAL:=(v_peso/(v_altura*v_altura));
	RETURN TOTAL;  
	END CalcularIMC2;
Segun lo que he hecho, deberia calcular el ICM de todos los jugadores de la tabla, pero no se como devolver los datos para comprobarlo, aunque el paso final es calcular la media de ICM, cosa que tampoco se hacer, al usar llamada a funcion.

Si no habia pensado en que esta funcion haga todos pasos, ya que entonces podria meter el valor de ICM en una variable acumuladora y luego calcular la media, o hacerlo mediante un array.

Perdon si no me explico bien, llevo un lio en la cabeza ahora como para saber si lo expreso bien.

Un saludo