56 lines
2.2 KiB
SQL
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;
|
|
/ |