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