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;

Entradas relacionadas: