10
 
06/11/2019

Función de Oracle para determinar si un año es bisiesto o no

Función de Oracle para determinar si un año es bisiesto o noSe crea una función de Oracle que permita calcular si un año es bisiesto o no, controlando los errores que se pudiesen presentar mediante la implementación de una excepción.

En esta ocasión traigo para ustedes una función creada en la base de datos Oracle que permite calcular si un año es bisiesto o no, mediante la implementación de una sencilla evaluación realizada a partir de una estructura de control condicional que usa la función propia MOD.

La función fue probada en la versión 19C de la base de datos de Oracle y en versiones más antiguas como la 8i, 9i, 10g, 11g y 12C.

CREATE OR REPLACE FUNCTION F_BISIESTO (p_anyo IN NUMBER)
RETURN NUMBER
IS
/* ************************************************************************************
* Procedimiento: f_bisiesto
* Descripción: Calcular si un año es bisiesto o no
* Parámetros: p_anyo el año a evaluar
* Retorna: v_bisiesto 1 ó 0, si es Verdadero o Falso
* *********************************************************************************
*/
v_bisiesto NUMBER := 0;
BEGIN
IF MOD ( p_anyo, 4 ) = 0
AND MOD ( p_anyo, 100 ) != 0
OR MOD ( p_anyo, 400 ) = 0 THEN
v_bisiesto := 1;
END IF;
RETURN v_bisiesto;
EXCEPTION WHEN OTHERS THEN
RETURN 0;
END;
/
Function created.

Ahora vamos a probar la función creada a través de la corrida como una sentencia Sql.
SELECT F_BISIESTO (2019) FROM DUAL;

Resultado:
F_BISIESTO(2019)
0

SELECT F_BISIESTO (2020) FROM DUAL;

Resultado:
F_BISIESTO(2020)
1

De igual manera, procedemos a ejecutar un bloque anónimo en PLSQL que hace uso de nuestra función F_BISIESTO para comprobar los resultados arrojados cuando definimos una variable que permitirá evaluar el año 2020.
DECLARE
v_anyo NUMBER := 2020;
v_bisiesto NUMBER := 0;
BEGIN
v_bisiesto := F_BISIESTO ( v_anyo );
IF v_bisiesto = 1 THEN
DBMS_OUTPUT.PUT_LINE('El año '||v_anyo||' es bisiesto.');
ELSE
DBMS_OUTPUT.PUT_LINE('El año '||v_anyo||' no es bisiesto.');
END IF;
END;
/
Statement processed.
El año 2020 es bisiesto.

Al mismo tiempo quisimos comprobar un resultado diferente al pasar como argumento el año 2019, para así darnos cuenta de que al retornar nuestra función el valor cero (0) podemos trabajar los valores devueltos según las circunstancias.
DECLARE
v_anyo NUMBER := 2019;
v_bisiesto NUMBER := 0;
BEGIN
v_bisiesto := F_BISIESTO ( v_anyo );
IF v_bisiesto = 1 THEN
DBMS_OUTPUT.PUT_LINE('El año '||v_anyo||' es bisiesto.');
ELSE
DBMS_OUTPUT.PUT_LINE('El año '||v_anyo||' no es bisiesto.');
END IF;
END;
/
Statement processed.
El año 2019 no es bisiesto.
Consulta Lo+ Top de Base De Datos
Todos los titulares en un solo lugar...