Funciones PL/SQL para Cálculo de IMC: Conversiones y Estadísticas
Enviado por Chuletator online y clasificado en Deporte y Educación Física
Escrito el en español con un tamaño de 3,62 KB
Este documento presenta funciones PL/SQL diseñadas para calcular el Índice de Masa Corporal (IMC), realizar conversiones de unidades de peso y altura, y obtener estadísticas relacionadas con el IMC de jugadores de la NBA almacenados en una base de datos.
1. Función PesoKilos
Esta función convierte un peso dado en libras a kilogramos.
CREATE OR REPLACE FUNCTION PesoKilos (v_peso_en_libras jugadores.peso%type) RETURN NUMBER IS
v_peso_en_kilos NUMBER;
BEGIN
v_peso_en_kilos := v_peso_en_libras / 2.2;
RETURN v_peso_en_kilos;
EXCEPTION
WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE('Error de cálculo');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE || SQLERRM);
END;
2. Función AlturaMetros
Esta función convierte una altura dada en pies a metros.
CREATE OR REPLACE FUNCTION AlturaMetros (v_pies IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN (v_pies * 0.3048);
EXCEPTION
WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE('Error de cálculo');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE || SQLERRM);
END;
3. Función ICM
Esta función calcula el IMC a partir de la altura en metros y el peso en kilogramos.
CREATE OR REPLACE FUNCTION ICM (peso NUMBER, altura NUMBER) RETURN NUMBER IS
BEGIN
RETURN (peso / (altura * altura));
END;
Ejemplo de uso:
DECLARE
peso NUMBER := &INSERTE_PESO_KG;
altura NUMBER := &INSERTE_ALTURA_METROS;
BEGIN
DBMS_OUTPUT.PUT_LINE(ICM(peso, altura));
END;
3bis. Función ICM2
Esta función calcula el IMC a partir de la altura en pies-pulgadas (como una cadena) y el peso en libras. Esta función utiliza las funciones PesoKilos
y AlturaMetros
para realizar las conversiones necesarias.
CREATE OR REPLACE FUNCTION ICM2 (p_altura jugadores.altura%type, p_peso jugadores.peso%type) RETURN NUMBER IS
BEGIN
RETURN PesoKilos(p_peso) / (AlturaMetros(p_altura) * AlturaMetros(p_altura));
END;
5. Función MediaICM
Esta función calcula el IMC promedio de los jugadores de la NBA en la base de datos. Utiliza las funciones PesoKilos
, AlturaMetros
e ICM
.
CREATE OR REPLACE FUNCTION ICMmedio RETURN NUMBER IS
media NUMBER;
BEGIN
SELECT AVG(ICM(PesoKilos(peso), AlturaMetros(altura)))
INTO media
FROM jugadores;
RETURN media;
END ICMmedio;
SELECT ICMmedio FROM dual;
6. Bloque Anónimo para Visualizar el Promedio de IMC
Este bloque anónimo utiliza la función ICMmedio
para mostrar el promedio del IMC.
DECLARE
BEGIN
DBMS_OUTPUT.PUT_LINE(ICMmedio);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No existe el jugador');
WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE('Error de calculo');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE || SQLERRM);
END;
7. Bloque Anónimo para Visualizar Jugadores con IMC Menor al Promedio
Este bloque anónimo identifica y muestra los nombres de los jugadores cuyo IMC es menor que el promedio calculado por la función ICMmedio
. Utiliza un cursor para iterar sobre los jugadores.
DECLARE
icmindiv NUMBER;
CURSOR c_jugadores IS
SELECT nombre, ICM(PesoKilos(peso), AlturaMetros(altura)) AS icmindiv
FROM jugadores;
BEGIN
DBMS_OUTPUT.PUT_LINE('ICMmedio: ' || ICMmedio);
FOR r_jugadores IN c_jugadores LOOP
IF (r_jugadores.icmindiv < ICMmedio) THEN
DBMS_OUTPUT.PUT_LINE(r_jugadores.nombre || ': ' || r_jugadores.icmindiv);
END IF;
END LOOP;
END;