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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
DECLARE
sessionId INT :=5172 ;
typeExtraction VARCHAR(10) := 'Purge';
suiviBatch INT := 53652;
dateDebut VARCHAR(10) := '01/04/2009';
dateFin VARCHAR(10) := '30/07/2009';
type typeOperationAEtape is record (
ope_id OPERATION.ope_id%type
) ;
type typeOperationPere is record (
ope_id OPERATION.ope_id%type,
id_fonc OPERATION.OPE_NUM_OPERATION%type
) ;
type T_OPERATION_A_ETAPE is table of typeOperationAEtape ;
type T_OPERATION_PERE is table of typeOperationPere;
LesOperationAEtapes T_OPERATION_A_ETAPE ;
LesOperationPeres T_OPERATION_PERE ;
CURSOR cursorListePere(fils number) is SELECT
ope_id,ope_num_operation
FROM operation
START WITH ope_id=fils
CONNECT BY PRIOR ope_id_precedente = ope_id;
BEGIN
SELECT
OPERATION.OPE_ID BULK COLLECT INTO LesOperationAEtapes
FROM
OPERATION INNER JOIN TYPE_OPERATION
ON OPERATION.TYP_TOP_ID = TYPE_OPERATION.TOP_ID
LEFT OUTER JOIN APUREMENT_INCIDENT_CAISSE
ON OPERATION.OPE_ID = APUREMENT_INCIDENT_CAISSE.OPE_ID
LEFT OUTER JOIN APUREMENT_INCIDENT_ATELIER
ON OPERATION.OPE_ID = APUREMENT_INCIDENT_ATELIER.OPE_ID
LEFT OUTER JOIN incident_atelier_reception
ON APUREMENT_INCIDENT_ATELIER.OPE_ID_IAR = incident_atelier_reception.OPE_ID
LEFT OUTER JOIN incident_caisse_reception
ON APUREMENT_INCIDENT_CAISSE.OPE_ID_ICR = incident_caisse_reception.OPE_ID
WHERE
OPE_DATE_ARCHIVAGE BETWEEN dateDebut AND dateFin
AND OPE_STATUT_ARCHIVAGE = 'Archivé'
AND type_operation.TOP_STATUT_FINAL = 'Y'
AND ((OPERATION.ope_num_operation <> OPERATION.ope_code_regroupement
OR ope_statut IN ('Annulé','Supprimé')) OR OPERATION.ope_num_operation = OPERATION.ope_code_regroupement)
AND (TOP_IDENTIFIANT not in ('INCCAEXD','INCCAEXE','INCATBED','INCATBEE'))
AND ((incident_caisse_reception.ICR_MT_RESTANT_APURER IS NULL AND incident_atelier_reception.IAR_MT_RESTANT_APURER IS NULL)
OR incident_caisse_reception.ICR_MT_RESTANT_APURER = 0
OR incident_atelier_reception.IAR_MT_RESTANT_APURER = 0
);
for I in LesOperationAEtapes.First..LesOperationAEtapes.Last loop
-- Dbms_Output.Put_Line (LesOperationAEtapes (I).ope_id || ': ');
OPEN cursorListePere(LesOperationAEtapes (I).ope_id);
LOOP
FETCH cursorListePere BULK COLLECT INTO LesOperationPeres LIMIT 1000;
FORALL J IN 1..LesOperationPeres.COUNT
INSERT INTO EXTR_ID_ARC_PUR (EXTR_ID,EXT_TYPE_EXTRACTION,SES_ID,SVBATCH_ID,OPE_ID, ID_FONC) VALUES (S_EXTR_ID_ARC_PUR.NEXTVAL,typeExtraction,sessionId,suiviBatch,LesOperationPeres(J).ope_id,LesOperationPeres(J).id_fonc);
EXIT WHEN cursorListePere%NOTFOUND;
END LOOP;
CLOSE cursorListePere;
END LOOP ;
end; |
Partager