17/08/2019 | vistas:
Función para calcular la diferencia de años entre dos fechas - PLSQL de Oracle

Esta función ha sido probada en versiones 9i, 10g y 11g de la plataformas Oracle y su lenguaje de programación procedural y de consultas estructuradas PL/SQL.
El código consiste en pasar dos valores de tipo fecha como argumentos para luego conocer la cantidad de meses que hay entre ambos mediante el uso de la función propia de Oracle, MONTHS_BETWEEN. Posteriormente, el resultado arrojado se divide entre el número 12 que representa el total de meses que tiene un año, y en el caso de que dicho resultado sea un valor decimal entonces será convertido al valor del entero más largo que es igual o menor al número previamente arrojado.
Con esta función es posible conocer la edad de una persona haciendo uso de la fecha de nacimiento y SYSDATE. También sirve para conocer los años de antigüedad que un empleado tiene laborando en una empresa o entidad.
La función requiere de dos parámetros de entrada de tipo "DATE" y retorna un valor numérico. En caso de error retornará cero (0).
Veamos el código de la función.
CREATE OR REPLACE FUNCTION F_ANOS (p_fecini IN DATE, p_fecfin IN DATE)
RETURN NUMBER
IS
/* ************************************************************************************
* Función: f_anos
* Descripción: Permite calcular los años de diferencia entre 2 fechas
* Parámetros: p_fecini Fecha de inicio; p_fecfin Fecha de fin
* Retorna: v_anos Los años
* *********************************************************************************
*/
v_anos NUMBER := 0;
BEGIN
/* Calcula los años de diferencia */
v_anos := FLOOR(MONTHS_BETWEEN(p_fecfin, p_fecini ) / 12);
/* retorna Años */
RETURN v_anos;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END F_ANOS;
/
RETURN NUMBER
IS
/* ************************************************************************************
* Función: f_anos
* Descripción: Permite calcular los años de diferencia entre 2 fechas
* Parámetros: p_fecini Fecha de inicio; p_fecfin Fecha de fin
* Retorna: v_anos Los años
* *********************************************************************************
*/
v_anos NUMBER := 0;
BEGIN
/* Calcula los años de diferencia */
v_anos := FLOOR(MONTHS_BETWEEN(p_fecfin, p_fecini ) / 12);
/* retorna Años */
RETURN v_anos;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END F_ANOS;
/
/* Ejecutar F_ANOS */
SELECT F_ANOS(TO_DATE('24-DEC-1990'),SYSDATE) anyos FROM DUAL;
SELECT F_ANOS(TO_DATE('24-DEC-1990'),SYSDATE) anyos FROM DUAL;
Consulta Lo+ Top de Base De Datos