| 12
 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
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 
 |  
 PROCEDURE "CALCUL_ALERTES"
   IS
     CURSOR P_CUR
     IS
       SELECT  DL.NOM_DOMAINE,
		       R.NOM_PRODUCTEUR,
		       R.NOM_FLUX,
		       E.NOM_CONSOMMATEUR,
		       R.NB_FLUX_A_SURVEILLER,
		       R.SEUIL_HORAIRE1,
		       R.SEUIL_HORAIRE2,
		       R.SEUIL_HORAIRE3
       FROM     T_PLANS_DE_ROUTAGES   R,
              T_DL_APPLI_FLUX       DL,
		      T_DYNAMIQUE_ENDPOINTS E,
		      T_POST_TRAITEMENTS    T
       WHERE DL.NOM_APPLICATION = R.NOM_PRODUCTEUR
	   AND DL.NOM_FLUX = R.NOM_FLUX
	   AND E.POST_TRAITEMENT_ID = T.POST_TRAITEMENT_ID
	   AND T.PLAN_DE_ROUTAGE_ID = R.PLAN_DE_ROUTAGE_ID;
 
     R_ALERTES P_CUR%ROWTYPE;
     DATESYSTEM DATE;
     COMPTEUR_ENTREE NUMBER;
     COMPTEUR_SORTIE NUMBER;
     SANTE_FLUX CHAR;
     SANTE_TRANSMISSION CHAR;
     NB_FLUX1 NUMBER;
     NB_FLUX2 NUMBER;
     NB_FLUX3 NUMBER;
     DUREE_SURVEILLANCE NUMBER;
 
   BEGIN
    DBMS_OUTPUT.PUT_LINE(' -------- DEBUT DE PROC STOCK CALCUL_ALERTES -------- ');
    DATESYSTEM:=SYSDATE;
   --DABORD ON VIDE LA TABLE
   EXECUTE IMMEDIATE('TRUNCATE TABLE T_ALERTES');
    OPEN P_CUR;
        LOOP
          BEGIN
            FETCH P_CUR INTO R_ALERTES;
            --SI ON EST A LA FIN EN EXIT
            EXIT WHEN P_CUR%NOTFOUND;
 
 
 
              --CALCULE NOMBRE FLUX SELON SEUIL 1,2 et 3
             SELECT COUNT(TT.NOM_FLUX) INTO NB_FLUX1  FROM T_TRACES TT WHERE TT.NOM_FLUX = R_ALERTES.NOM_FLUX AND TT.CONSOMATEUR = R_ALERTES.NOM_PRODUCTEUR AND TT.DATE_CREATION BETWEEN  DATESYSTEM -  (R_ALERTES.SEUIL_HORAIRE1)/24  AND  DATESYSTEM  GROUP BY NOM_FLUX;
             SELECT COUNT(TT.NOM_FLUX) INTO NB_FLUX2  FROM T_TRACES TT WHERE TT.NOM_FLUX = R_ALERTES.NOM_FLUX AND TT.CONSOMATEUR = R_ALERTES.NOM_PRODUCTEUR AND TT.DATE_CREATION BETWEEN  DATESYSTEM -  (R_ALERTES.SEUIL_HORAIRE2)/24  AND  DATESYSTEM  GROUP BY NOM_FLUX;
             SELECT COUNT(TT.NOM_FLUX) INTO NB_FLUX3  FROM T_TRACES TT WHERE TT.NOM_FLUX = R_ALERTES.NOM_FLUX AND TT.CONSOMATEUR = R_ALERTES.NOM_PRODUCTEUR AND TT.DATE_CREATION BETWEEN  DATESYSTEM -  (R_ALERTES.SEUIL_HORAIRE3)/24  AND  DATESYSTEM  GROUP BY NOM_FLUX;
 
            --GESTION DES EXCEPTIONS
              EXCEPTION
              WHEN NO_DATA_FOUND THEN NULL;
              END;
 
             --CALCULE SANTE_FLUX
             IF R_ALERTES.NB_FLUX_A_SURVEILLER < 0 THEN
             SANTE_FLUX := 'G';
             ELSE
                IF NB_FLUX1 > R_ALERTES.NB_FLUX_A_SURVEILLER THEN
	              SANTE_FLUX := 'V';
	              DUREE_SURVEILLANCE:=R_ALERTES.SEUIL_HORAIRE1;
                  ELSE
	                    IF NB_FLUX3 <= R_ALERTES.NB_FLUX_A_SURVEILLER THEN
	                    SANTE_FLUX := 'R';
	                    DUREE_SURVEILLANCE:=R_ALERTES.SEUIL_HORAIRE3;
                        ELSE
	                         IF NB_FLUX2 <= R_ALERTES.NB_FLUX_A_SURVEILLER THEN
	                         SANTE_FLUX := 'O';
	                         DUREE_SURVEILLANCE:=R_ALERTES.SEUIL_HORAIRE2;
	                         ELSE
		                         SANTE_FLUX := 'J';
		                         DUREE_SURVEILLANCE:=R_ALERTES.SEUIL_HORAIRE1;
		                     END IF;
	                    END IF;
	              END IF;
	         END IF;
 
			--CALCULE COMPTEUR_ENTREE
              SELECT COUNT(T.NOM_FLUX)
		          INTO COMPTEUR_ENTREE
		          FROM T_TRACES T
		         WHERE T.NOM_FLUX = R_ALERTES.NOM_FLUX
		           AND T.PRODUCTEUR = R_ALERTES.NOM_PRODUCTEUR
		           AND T.CONSOMATEUR IS NULL
		           AND T.DATE_CREATION BETWEEN  DATESYSTEM -  (DUREE_SURVEILLANCE)/24  AND  DATESYSTEM
		           GROUP BY T.NOM_FLUX, T.PRODUCTEUR;
 
             --CALCULE COMPTEUR_SORTIE
              SELECT COUNT(T.NOM_FLUX)
		          INTO COMPTEUR_SORTIE
		          FROM T_TRACES T
		         WHERE T.NOM_FLUX = R_ALERTES.NOM_FLUX
		           AND T.PRODUCTEUR = R_ALERTES.NOM_PRODUCTEUR
		           AND T.STATUS = 'OK'
		           AND T.CONSOMATEUR IS NOT NULL
		           AND T.DATE_CREATION BETWEEN  DATESYSTEM -  (DUREE_SURVEILLANCE)/24  AND  DATESYSTEM
		           GROUP BY T.NOM_FLUX, T.PRODUCTEUR;
 
		           RAISE NO_DATA_FOUND;
 
             -- CLACULE SANTE_TRANSMISSION
             IF COMPTEUR_ENTREE = COMPTEUR_SORTIE THEN
             SANTE_TRANSMISSION:='V';
             ELSE
             SANTE_TRANSMISSION:='R';
             END IF;
 
          --INSERT DONNEES
               insert into T_alertes
				  (nom_domaine,
				   nom_producteur,
				   nom_flux,
				   date_derniere_verif,
				   nom_consomateur,
				   duree_surveillance,
				   compteur_entree,
				   compteur_sortie,
				   sante_flux,
				   sante_transmission)
				values
				  (R_ALERTES.NOM_DOMAINE,
				   R_ALERTES.NOM_PRODUCTEUR,
				   R_ALERTES.NOM_FLUX,
				   DATESYSTEM,
				   R_ALERTES.NOM_CONSOMMATEUR,
				   DUREE_SURVEILLANCE,
				   COMPTEUR_ENTREE,
				   COMPTEUR_SORTIE,
				   SANTE_FLUX,
				   SANTE_TRANSMISSION);
          COMMIT;
        END LOOP;
     CLOSE P_CUR;
    DBMS_OUTPUT.PUT_LINE(' -------- FIN   DE PROC STOCK CALCUL_ALERTES -------- ');
   END "CALCUL_ALERTES"; | 
Partager