--Escriba un procedimiento almacenado, ingrese una fecha y determine cuántos días faltan para el final del año.
cree o reemplace el procedimiento sp_end(i_date varchar2,o_end out varchar2)
es
--declare dos variables, v_end almacena el final transformado -of-year date, y v_errm usa Para almacenar la excepción
v_end date;
v_errm varchar2(50);
begin
if length(i_date)<>8 then
dbms_output.put_line('El formato de fecha de entrada es incorrecto, el formato correcto es: aaaammdd ');
end if;
/*Análisis de función: to_date: función de conversión de fecha; trunc: función de truncamiento, 'yyyy' significa truncar por año, y devolverá el 1 de enero del año actual; add_months: función de suma y resta de mes,
sumando noviembre a diciembre; last_day: saltar al final de la función del mes actual;
después de la conversión de estas funciones, la fecha de entrada será el 31 de diciembre del año actual; ceil: redondear hacia arriba*/
v_end:=last_day(add_months(trunc( to_date(i_date,'yyyy-mm-dd '),'yyyy'),11));
--Reste la fecha de entrada de la fecha al final del año y devuelva la diferencia en días
o_end:=ceil(v_end -to_date(i_date,'yyyy-mm-dd')) ;
dbms_output.put_line(to_date(i_date,'yyyy-mm-dd')||'Todavía quedan días antes de que finalice el año'||o_end||'days'); -- excepción de manejo de excepción
cuando
otros
v_errm
: =sqlerrm;
dbms_output.put_line (v_errm);
end sp_end;
--Llamar al procedimiento almacenado
declare
v_end varchar2(50);
begin
sp_end('20230330',v_end);
end;
Nota: Si tiene alguna pregunta, puede dejar un mensaje.