Files
gateway-mnp-dbc/dbcmnpsrc/FE/mnpapp/script/procedure/mnp/MNP_CREA_PARTIZIONE.sql
2024-05-13 12:54:14 +02:00

56 lines
2.2 KiB
SQL

CREATE OR REPLACE PROCEDURE crea_partizione
( p_data_partizione date default sysdate,
p_nome_tabella varchar2,
p_path_file_log varchar2
) IS
-- la procedura prende in ingresso la data di storicizzazione
-- e imposta la data limite della nuova partizione aggiungendo 3 mesi a quella in ingresso
v_data_part varchar2(100);
v_nome_part varchar2(100);
s_partition_name_max varchar2(100);
puntatore_file_log UTL_FILE.FILE_TYPE;
v_anno number;
BEGIN
v_data_part := to_char(p_data_partizione,' yyyy-mm-dd hh24:mi:ss');
-- impostazione del nome della partizione con il seguente formato:
-- yyyy_q anno (yyyy anno corrente - q trimestre di riferimento della partizione)
v_nome_part := 'T'||to_char(trunc(p_data_partizione,'mm')-1,'q');
if v_nome_part = 'T4' then
v_anno := to_number(to_char(p_data_partizione,'yyyy'))-1;
v_nome_part := v_nome_part||'_'||v_anno;
else
v_nome_part := v_nome_part||to_char(p_data_partizione, '_yyyy');
end if;
puntatore_file_log := UTL_FILE.FOPEN(p_path_file_log,'crea_partizione_'||p_nome_tabella||'_'||to_char(sysdate, 'ddmmyyyy_hh24miss')||'.log','a');
UTL_FILE.PUT_LINE(puntatore_file_log, to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss')||' Inizio Procedura crea_partizione per la tabella '||p_nome_tabella);
select a.partition_name
into s_partition_name_max
FROM all_tab_partitions a
where a.table_name = upper(p_nome_tabella)
and a.partition_position =
( select max(partition_position)
from all_tab_partitions
where table_name = upper(p_nome_tabella));
execute immediate('ALTER TABLE '|| p_nome_tabella ||'
SPLIT PARTITION ' || s_partition_name_max || ' AT (TO_DATE('''||v_data_part||''', ''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN''))
INTO (PARTITION ' || v_nome_part ||',
PARTITION ' ||s_partition_name_max||')');
UTL_FILE.PUT_LINE(puntatore_file_log, 'Creata partizione '||v_nome_part);
UTL_FILE.PUT_LINE(puntatore_file_log, to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss')||' Fine Procedura crea_partizione per la tabella '||v_nome_part);
UTL_FILE.FCLOSE(puntatore_file_log);
EXCEPTION WHEN OTHERS THEN
raise;
END;
/