Viernes, 12 Junio 2020 03:25

Función Primer y Último Día del Actual Mes

Rate this item
(0 votes)

Objetivos: 

•Ver el uso de algunas funciones de fecha en PL/SQL y con ellas crear una(función, trigger, procedimiento...) que cumpla cierto requerimiento .

•Mas que nada, entretenerme un poco.

Hace poco tuve una asignación en la cual tenia que modificar un Schedule Job el cual tenia que ejecutarse por primera ver el día 1(primero) del siguiente mes a una hora especifica y luego tenia que seguir ejecutándose cada mes el día 1(primero) a la misma hora ya establecida.

Para completar la tarea utilize las  funciones que presento a continuación pero con ciertas diferencias:

Nota: No doy muchas explicaciones ya que las funciones que uso están explicadas en publicaciones anteriores.


CREATE OR REPLACE FUNCTION F_L_DATE(P_DAY IN CHAR)
    RETURN VARCHAR2
AS
    CURSOR C_FIRST IS
        SELECT --'FM' Remueve ciertos espacios que contienen las fechas
            TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE, -1))+1,'FMDAY ','NLS_DATE_LANGUAGE=SPANISH')
            ||TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE, -1))+1,'DD')
        FROM DUAL; --NLS_DATE_LANGUAGE: Especificar el idioma en cual se mostrara la fecha.
     ----
    CURSOR C_LAST IS
        SELECT
            TO_CHAR(LAST_DAY(SYSDATE), 'FMDAY ','NLS_DATE_LANGUAGE=SPANISH')
            ||TO_CHAR(LAST_DAY(SYSDATE), 'DD')
        FROM DUAL;
     ---
    V_FIRST VARCHAR(13);
    V_LAST V_FIRST%TYPE;
BEGIN
    IF UPPER(P_DAY) = 'F' THEN
        OPEN C_FIRST;
        FETCH C_FIRST INTO V_FIRST;
        CLOSE C_FIRST;
        RETURN INITCAP(V_FIRST);
    ELSIF UPPER(P_DAY) = 'L' THEN
        OPEN C_LAST;
        FETCH C_LAST INTO V_LAST;
        CLOSE C_LAST;
        RETURN INITCAP(V_LAST);
    ELSE
        RETURN 'Valid Entries: F= First Day/Primer Día; L= Last Day/Último Día';    
    END IF;
END F_L_DATE;

Usando dicha Función: 

 
SELECT
    F_L_DATE('K')
FROM DUAL;

-- No se cumple condición alguna por lo cual retorna:

--OUTPUT: Valid Entries: F= First Day/Primer Día; L= Last Day/Último Día

 

 
SELECT
    F_L_DATE('F')
FROM DUAL;

-- Se Cumple primer condición del IF por lo cual retorna el primer día del mes actual

--OUTPUT: Domingo 01

 

 
SELECT
    F_L_DATE('L')
FROM DUAL;

-- Se Cumple segunda condición del IF por lo cual retorna el último día del mes actual

--OUTPUT: Martes 31

--Nota: tus resultados serían distintos debido a la fecha en cual lo ejecutas.

Read 685 times Last modified on Miércoles, 08 Julio 2020 15:37

Leave a comment

Make sure you enter all the required information, indicated by an asterisk (*). HTML code is not allowed.

Magic PL/SQL

Blog orientado al desarrollo de PL / SQL en el "Maravilloso Mundo ORACLE". Cursos Online y Tutoriales Gratis de Manejo de Base de Datos. Aprende a programar, a crear aplicaciones para empresas y negocios y gana dinero. Hosting y Tecnología.