Novedades
Música
 
Imagen, foto o portada de Si Biri Bop de Nacho, Jerry Di (Canción, 2023)
Si Biri Bop de Nacho, Jerry Di (Canción, 2023)
Imagen, foto o portada de EVEREST de Ramón Vega (Canción, 2023)
EVEREST de Ramón Vega (Canción, 2023)
Imagen, foto o portada de La Luz de Luis Figueroa (Canción, 2023)
La Luz de Luis Figueroa (Canción, 2023)
Imagen, foto o portada de Cálmame de Sixto Rein (Canción, 2023)
Cálmame de Sixto Rein (Canción, 2023)
Imagen, foto o portada de Si Le Gritan Pu (feat. Chris Andrew) de Cauty, Junior Caldera, Razzer Buccarelli (Canción, 2023)
Si Le Gritan Pu (feat. Chris Andrew) de Cauty, Junior Caldera, Razzer Buccarelli (Canción, 2023)
Imagen, foto o portada de Helicóptero de El Alfa (Canción, 2023)
Helicóptero de El Alfa (Canción, 2023)
Imagen, foto o portada de Factura de Kobi Cantillo (Canción, 2023)
Factura de Kobi Cantillo (Canción, 2023)
Imagen, foto o portada de El Hombre de Elena Rose (Canción, 2023)
El Hombre de Elena Rose (Canción, 2023)
Imagen, foto o portada de REMIX EXCLUSIVO de Feid (Canción, 2023)
REMIX EXCLUSIVO de Feid (Canción, 2023)
Imagen, foto o portada de Tiempo Indefinido de Susana Cala (Canción, 2023)
Tiempo Indefinido de Susana Cala (Canción, 2023)
Imagen, foto o portada de Twerk de Hozwal, Nio García (Canción, 2023)
Twerk de Hozwal, Nio García (Canción, 2023)
Imagen, foto o portada de Terraza de Gustavo Elis, Jeeiph, Jimmix (Canción, 2023)
Terraza de Gustavo Elis, Jeeiph, Jimmix (Canción, 2023)
Imagen, foto o portada de En Bajita de Justin Quiles, Natti Natasha, Omar Courtz (Canción, 2023)
En Bajita de Justin Quiles, Natti Natasha, Omar Courtz (Canción, 2023)
Imagen, foto o portada de LA SANTA de Lola Indigo (Canción, 2023)
LA SANTA de Lola Indigo (Canción, 2023)
Imagen, foto o portada de En La Intimidad de Jowell & Randy, Nicky Jam (Canción, 2023)
En La Intimidad de Jowell & Randy, Nicky Jam (Canción, 2023)
Imagen, foto o portada de Cosas Locas 2.0 (feat. Juseph & Lucho RK) de Danny Romero, Saiko, Soge Culebra (Canción, 2023)
Cosas Locas 2.0 (feat. Juseph & Lucho RK) de Danny Romero, Saiko, Soge Culebra (Canción, 2023)
Imagen, foto o portada de X 1 BESO de Ryan Castro, De La Ghetto (Canción, 2023)
X 1 BESO de Ryan Castro, De La Ghetto (Canción, 2023)
Imagen, foto o portada de Cuánto Quieres (feat. Brray) de Genio, Justin Quiles, Juhn (Canción, 2023)
Cuánto Quieres (feat. Brray) de Genio, Justin Quiles, Juhn (Canción, 2023)
Imagen, foto o portada de Boom Boom Rumbun de Bulova (Canción, 2023)
Boom Boom Rumbun de Bulova (Canción, 2023)
Imagen, foto o portada de Llévame En Tus Sueños de Felipe Peláez, El Cartel Vallenato (Canción, 2023)
Llévame En Tus Sueños de Felipe Peláez, El Cartel Vallenato (Canción, 2023)
Imagen, foto o portada de LUNA de Jd Pantoja, Kim Loaiza (Canción, 2023)
LUNA de Jd Pantoja, Kim Loaiza (Canción, 2023)
Imagen, foto o portada de Arranca (feat. Omega) de Becky G, Omega (Canción, 2023)
Arranca (feat. Omega) de Becky G, Omega (Canción, 2023)
Imagen, foto o portada de Quién de Dayanara, Américo (Canción, 2023)
Quién de Dayanara, Américo (Canción, 2023)
Imagen, foto o portada de Olvidar de Angel22 (Canción, 2023)
Olvidar de Angel22 (Canción, 2023)
Imagen, foto o portada de No Me Controles de Rvssian, Danny Ocean, Sean Paul (Canción, 2023)
No Me Controles de Rvssian, Danny Ocean, Sean Paul (Canción, 2023)
Imagen, foto o portada de Anoche de ITZZA PRIMERA (Canción, 2023)
Anoche de ITZZA PRIMERA (Canción, 2023)
Imagen, foto o portada de lo que hay x aquí de Rels B (Canción, 2023)
lo que hay x aquí de Rels B (Canción, 2023)
Imagen, foto o portada de Bye de Juan Magán, Kidd Keo (Canción, 2023)
Bye de Juan Magán, Kidd Keo (Canción, 2023)
Imagen, foto o portada de AWCH de Angela Torres (Canción, 2023)
AWCH de Angela Torres (Canción, 2023)
Imagen, foto o portada de Friendzone de Marconi Impara, Alejo (Canción, 2023)
Friendzone de Marconi Impara, Alejo (Canción, 2023)
Imagen, foto o portada de NO voy a llorar :') de NICKI NICOLE (Canción, 2023)
NO voy a llorar :') de NICKI NICOLE (Canción, 2023)
Imagen, foto o portada de After Party de Kevin Roldán, Bryant Myers (Canción, 2023)
After Party de Kevin Roldán, Bryant Myers (Canción, 2023)
Imagen, foto o portada de La Reina de Maluma (Canción, 2023)
La Reina de Maluma (Canción, 2023)
Imagen, foto o portada de AGUARDIENTE de Myke Towers (Canción, 2023)
AGUARDIENTE de Myke Towers (Canción, 2023)
Imagen, foto o portada de La Difícil de Fanny Lu (Canción, 2023)
La Difícil de Fanny Lu (Canción, 2023)
Imagen, foto o portada de Deep Trip de Ir Sais (Canción, 2023)
Deep Trip de Ir Sais (Canción, 2023)
Imagen, foto o portada de Be Con Be de Noriel, Pailita (Canción, 2023)
Be Con Be de Noriel, Pailita (Canción, 2023)
Imagen, foto o portada de Tiempo Perdido de Lu Decker (Canción, 2023)
Tiempo Perdido de Lu Decker (Canción, 2023)
Imagen, foto o portada de Puesto Pal Dinero de JC La Nevula (Canción, 2023)
Puesto Pal Dinero de JC La Nevula (Canción, 2023)
Imagen, foto o portada de Como Agua de Rafa Pabön (Canción, 2023)
Como Agua de Rafa Pabön (Canción, 2023)
Imagen, foto o portada de For You de Jay Wheeler (Canción, 2023)
For You de Jay Wheeler (Canción, 2023)
Imagen, foto o portada de Gris de Juanes (Canción, 2023)
Gris de Juanes (Canción, 2023)
Imagen, foto o portada de Para No Verte Más de Thalia, Kenia Os (Canción, 2023)
Para No Verte Más de Thalia, Kenia Os (Canción, 2023)
Imagen, foto o portada de Ronca de Lunay (Canción, 2023)
Ronca de Lunay (Canción, 2023)
Imagen, foto o portada de Tu Recuerdo de Wisin, Emilia, Lyanno (Canción, 2023)
Tu Recuerdo de Wisin, Emilia, Lyanno (Canción, 2023)
Imagen, foto o portada de Más de Ti de Brytiago, Randy (Canción, 2023)
Más de Ti de Brytiago, Randy (Canción, 2023)
Imagen, foto o portada de Abajito de Lele Pons, Guaynaa (Canción, 2023)
Abajito de Lele Pons, Guaynaa (Canción, 2023)
Imagen, foto o portada de Mas Rica Que Ayer de Anuel AA, Mambo Kingz, Dj Luian (Canción, 2023)
Mas Rica Que Ayer de Anuel AA, Mambo Kingz, Dj Luian (Canción, 2023)
Internet
 
Marcas Y Productos
 
Leng. De Program.
 
Listas De Páginas
 
Lo+ Visto
Base De Datos
  1. Enorable
  2. Base De Datos
  3. Oracle
 
07/12/2019 |  vistas:

Imprimir calendario anual con PLSQL de Oracle (Procedimiento)

Imprimir calendario anual con PLSQL de Oracle (Procedimiento)Crear un procedimiento para imprimir el calendario anual ordenado por días, meses y semanas, a través de la implementación de código PL/SQL de Oracle.

En esta oportunidad he creado un procedimiento sencillo que nos sirva para imprimir o mostrar los días del año ordenados por meses y semanas, de acuerdo a ciertos parámetros aplicados, tal y como lo haría cualquier calendario.

Sin embargo, el código no contempla información sobre algunos otros detalles como por ejemplo: los días festivos y religiosos, así como las fases lunares. Por lo que es posible agregar mejoras en el procedimiento para que sirva además con algunas otras especificaciones, como por ejemplo: guardar los datos en una tabla de la base de datos, para su posterior uso en algún sistema o proceso que requiera de esta información.

En otra publicación estaré agregando nuevas instrucciones para que el procedimiento permita generar sentencias INSERT de los días del año, ordenados por semana.

Recuerda que si esta publicación te ha servido de ayuda para solucionar un problema informático, puedes apoyar mi trabajo realizando una contribución a través de mi perfil de usuario de la página.

Creando el procedimiento P_CALENDAR

Este procedimiento requiere de dos parámetros de entrada, los cuales hacen referencia al año y el mes a imprimir en el calendario.
CREATE OR REPLACE PROCEDURE P_CALENDAR (p_year IN NUMBER, p_month IN NUMBER)
IS
/* ************************************************************************************
* Procedimiento: p_calendar
* Descripción: Imprimir el calendario de un año/mes especificado
* Parámetros: p_year el año a consultar
* Retorna: p_month el mes a consultar
* *********************************************************************************
*/
v_anyo VARCHAR2 (4) := to_char(to_date(p_year-1,'yyyy'),'yyyy');
v_first_day_anyo DATE := last_day(to_date(v_anyo,'yyyy')) + 1;
v_month NUMBER := p_month;
v_first_day_month DATE;
v_last_day_month DATE;
v_last_weekday_where_month_end NUMBER;
v_days DATE;
v_days_ DATE;
v_week NUMBER;
v_week_ NUMBER;
v_numbers_of_weeks NUMBER := 0;
v_im NUMBER := 0;
v_ids NUMBER := 0;
v_id NUMBER := 0;
v_id_ NUMBER := 0;
v_days_week_ins VARCHAR2 (1000) := '';
v_dom DATE;
v_sab DATE;
v_flag BOOLEAN := FALSE;
-- Función para imprimir el nombre del mes
FUNCTION F_MONTHS (p_mon IN DATE,
p_format IN VARCHAR DEFAULT 'MONTH')
RETURN VARCHAR2
IS
v_month VARCHAR2 (15) := TO_CHAR (p_mon,p_format);
BEGIN
IF p_format = 'MON' THEN
IF v_month = 'JAN' THEN
v_month := 'ENE';
ELSIF v_month = 'APR' THEN
v_month := 'ABR';
ELSIF v_month = 'AUG' THEN
v_month := 'AGO';
ELSIF v_month = 'DEC' THEN
v_month := 'DIC';
END IF;
END IF;
RETURN v_month;
EXCEPTION
WHEN OTHERS
THEN
RETURN 'INDEFINIDO';
END F_MONTHS;
BEGIN
-- Primer ciclo de consulta de los días del mes
LOOP
v_im := v_month - 1;
v_first_day_month := ADD_MONTHS (v_first_day_anyo,v_im);
v_last_day_month := LAST_DAY (v_first_day_month);
v_last_weekday_where_month_end := 7 - TO_NUMBER (TO_CHAR (v_last_day_month,'d'));
DBMS_OUTPUT.PUT_LINE ( '-------------------------------------------------------------------------------------' );
DBMS_OUTPUT.PUT_LINE ( F_MONTHS (v_last_day_month,'MON') || ' ' );
DBMS_OUTPUT.PUT_LINE ( '=====================================================================================' );
DBMS_OUTPUT.PUT_LINE ( ' Dom Lun Mar Mié Jue Vie Sáb ' );
DBMS_OUTPUT.PUT_LINE ( '=====================================================================================' );
DBMS_OUTPUT.PUT_LINE ( '-------------------------------------------------------------------------------------' );
-- Segundo y tercer ciclo de consulta para ubicar los días en su columna correspondiente (Dom a Sáb)
LOOP
v_days := v_first_day_month + v_id_;
v_week := TO_NUMBER (TO_CHAR (v_days,'d'));
-- Número de semanas por mes
IF TO_CHAR (v_days,'mm') = p_month AND v_week = 2 THEN
v_numbers_of_weeks := v_numbers_of_weeks + 1;
END IF;
-- Organizar los días por grupo de siete (7) valores (las siete columnas de la semana)
IF MOD (v_id_,7) = 0 THEN
v_days_week_ins := '';
v_ids := 0;
v_id := 0;
LOOP
v_ids := v_ids + 1;
IF NOT v_flag THEN
v_days_ := (v_days + v_id);
END IF;
v_week_ := TO_CHAR (v_days_,'d');
-- Si el día de la columna coincide con el día de la fecha...
IF v_ids = v_week_ THEN
v_days_week_ins := v_days_week_ins || TO_CHAR (v_days_) || ' | ';
v_id := v_id + 1;
v_flag := FALSE;
ELSE
-- En caso contrario rellenar los días previos de la semana
v_days_week_ins := v_days_week_ins || TO_CHAR ((v_days_ - v_week_) + v_ids) || ' | ';
v_flag := TRUE;
END IF;
EXIT WHEN v_ids >= 7;
END LOOP;
DBMS_OUTPUT.PUT_LINE ( v_days_week_ins ); -- Imprimiendo el calendario
END IF;
v_id_ := v_id_ + 1;
EXIT WHEN v_id_ > (TO_NUMBER (TO_CHAR (v_last_day_month,'dd')) - 1) + v_last_weekday_where_month_end;
END LOOP;
DBMS_OUTPUT.PUT_LINE ( '-------------------------------------------------------------------------------------' );
DBMS_OUTPUT.PUT_LINE ( ' SEMANAS: ' || v_numbers_of_weeks || ' ' );
EXIT WHEN v_month >= p_month;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE('ERROR: ALGO SALIÓ MAL.' || sqlcode || ' - ' ||sqlerrm );
END P_CALENDAR;
/
Procedure created.

Ejecutar nuestro procedimiento llamado P_CALENDAR

Este subproceso nos permite imprimir los días calendario de un año y mes en específico como se muestra a continuación:
BEGIN
P_CALENDAR (2019, 1);
P_CALENDAR (2019, 2);
P_CALENDAR (2019, 3);
P_CALENDAR (2019, 4);
P_CALENDAR (2019, 5);
P_CALENDAR (2019, 6);
P_CALENDAR (2019, 7);
P_CALENDAR (2019, 8);
P_CALENDAR (2019, 9);
P_CALENDAR (2019, 10);
P_CALENDAR (2019, 11);
P_CALENDAR (2019, 12);
END;
Statement processed.

Mostrando los resultados

Los resultados que se muestran en las siguientes imágenes corresponden a algunos de los meses del año 2019 consultados en esta prueba.

Consulta Lo+ Top de Base De Datos
Todos los titulares en un solo lugar...