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 69 70 71 72 73 74
| SET SERVEROUTPUT ON SIZE 100000;
Declare
/* Variables gestion de table LISTEREQUETES */
vnumero number(12); /* Numero de la requete*/
Vreq varchar2(4000); /* Requete*/
/* Variables de traitement des erreurs */
VSQLCODE number; /* Code retour erreur oracle*/
vSQLERRM varchar2(4000); /* Message retour erreur oracle*/
/* Variables traitement de calcul */
vMsgErr varchar2(200);
vd1 timestamp; /* Date de debut de ttt */
vd2 timestamp; /* Date de fin ttt */
vd3 varchar2(6); /* Temps d'execution du traitement au format 99,999 sec */
/* Variable flag -> true si l'execute immediate se passe bien false sinan */
vbexecuteimmediat boolean;
/* Sélection des requetes SQL*/
cursor C1 is SELECT L.NUMERO,L.REQUETE
FROM LISTEREQUETES L ORDER BY L.NUMERO;
BEGIN
/* Début de la boucle du cursor 1 */
OPEN C1;
LOOP
vbexecuteimmediat := true;
vnumero := 0;
Vreq := null;
fetch C1 into Vnumero,Vreq;
exit when C1%NOTFOUND;
/*Affichage du numero de la requete */
DBMS_OUTPUT.PUT_LINE('Requete numero:' ||Vnumero);
/* Recuperation heure de debut */
vd1 := systimestamp;
/*Execution de la requete */
BEGIN
execute immediate Vreq;
EXCEPTION
WHEN OTHERS then
vbexecuteimmediat := false;
vmsgerr := vSQLCODE;
update LISTEREQUETES set comm=vmsgerr where numero=Vnumero;
commit;
END;
/* Recuperation heure de fin */
vd2 := systimestamp;
/* Calcul du temps de la requete */
vd3 := substr(to_char(vd2-vd1),18,6);
vmsgerr := SQLCODE;
/* Ecriture du temps et du msg d'erreur dans la table */
if vbexecuteimmediat = true then
update gfitest set temps= vd3,comm=vmsgerr,datedeb=vd1,datefin=vd2 where numero=Vnumero;
commit;
end if;
END LOOP;
CLOSE C1;
exception
when others then
vmsgerr := SQLCODE;
DBMS_OUTPUT.PUT_LINE(vmsgerr);
DBMS_OUTPUT.PUT_LINE('Arret du programme - Erreur fatale!');
end;
/ |
Partager