1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
set serveroutput on
DECLARE
PURGEDUREE NUMBER(12);
PURGEDUREE:=30;
NUM_ROW NUMBER(12);
NUM_ROW:=0;
NUM_ROW_TOTAL NUMBER(12);
NUM_ROW_TOTAL:=0;
NB_ROW_COMMIT NUMBER(12);
NB_ROW_COMMIT:=500;
--Curseur sur les commandes Non Injectée datant de plus de 30 jours
CURSOR cdePurge IS
SELECT ID
FROM COMMANDE.TABLE_COMMANDE
WHERE DATE_ENREGISTREMENT > (sysdate - PURGEDUREE) AND ETAT_INJECTION = 'NON_INJ';
BEGIN
dbms_output.PUT_LINE('Debut de la purge sur les commandes NON_INJ datant de plus de 30 jours');
FOR CURRENT_ID in cdePurge LOOP
-- Incrémentation du numéro de ligne courante
NUM_ROW:=NUM_ROW+1;
-- Incrémentation du numéro de ligne totale
NUM_ROW_TOTAL:=NUM_ROW_TOTAL+1;
-- effacement des references de la commande et etats
delete from COMMANDE.TABLE_COMMANDE_DETAILS WHERE RID_COMMANDE=CURRENT_ID.ID;
delete from COMMANDE.TABLE_COMMANDE_XML WHERE RID_COMMANDE=CURRENT_ID.ID;
-- effacement de la commande
delete from COMMANDE.TABLE_COMMANDE WHERE ID=CURRENT_ID.ID;
-------------------
-- commit partiel
-------------------
IF NUM_ROW>NB_ROW_COMMIT THEN
NUM_ROW:=0;
commit;
END IF;
----------------------
-- FIN commit partiel
----------------------
END LOOP;
dbms_output.PUT_LINE('Fin de la purge sur les commandes NON_INJ datant de plus de 30 jours, nb commandes purgées : ' || NUM_ROW_TOTAL);
commit;
END;
/ |
Partager