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:
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.--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;
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