First Commit - Source Code from Reply
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
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;
|
||||
/
|
||||
Reference in New Issue
Block a user