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
|
PROCEDURE UPDATE_TMP_CR_FACTU IS
TYPE ARRAY1 IS TABLE OF TMP_USG.TRANSAC_ID%TYPE;
TYPE ARRAY2 IS TABLE OF TMP_USG.CONTROLE_CR_FACTU%TYPE;
L_DATA_USG_TRANSAC_ID ARRAY1;
L_DATA_USG_CR_FACTU ARRAY2;
UPDATE_TMP_CR_FACTU_ERROR EXCEPTION;
PRAGMA EXCEPTION_INIT(UPDATE_TMP_CR_FACTU_ERROR, -20984);
CURSOR LISTE_USG IS
SELECT /* +PARALLEL(TU, 8) */
TU.TRANSAC_ID,
(CASE WHEN TU.TYPE_USAGE = 'COMM' THEN
(SELECT TMF.NOM_FICHIER FROM TMP_CR_FACTU TMF WHERE TMF.NO_FACTU = TU.NO_FACTURE AND TMF.NOM_FICHIER LIKE 'U%')
WHEN TU.TYPE_USAGE = 'WIFI' THEN
(SELECT TMF.NOM_FICHIER FROM TMP_CR_FACTU TMF WHERE TMF.NO_FACTU = TU.NO_FACTURE AND TMF.NOM_FICHIER LIKE 'W%')
ELSE
(SELECT TMF.NOM_FICHIER FROM TMP_CR_FACTU TMF WHERE TMF.NO_FACTU = TU.NO_FACTURE AND TMF.NOM_FICHIER LIKE 'S%')
END) as fichier
FROM
TMP_USG TU, TMP_FACTU TF
WHERE
TU.NO_FACTURE = TF.NO_FACTURE AND
TU.FACTU_PROV = 'FACTU' AND
TU.CONTROLE_CR_FACTU IS NULL AND
TF.EXTRACT = 'O';
BEGIN
OPEN LISTE_USG;
LOOP
FETCH LISTE_USG BULK COLLECT INTO L_DATA_USG_TRANSAC_ID, L_DATA_USG_CR_FACTU LIMIT 50000;
FORALL I IN INDICES OF L_DATA_USG_TRANSAC_ID
UPDATE TMP_USG SET CONTROLE_CR_FACTU = L_DATA_USG_CR_FACTU(I) WHERE TRANSAC_ID = L_DATA_USG_TRANSAC_ID(I);
COMMIT;
EXIT WHEN LISTE_USG%NOTFOUND;
END LOOP;
CLOSE LISTE_USG;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE_APPLICATION_ERROR(-20984, 'UPDATE_TMP_CR_FACTU, Erreur : ' || SQLERRM);
END UPDATE_TMP_CR_FACTU; |
Partager