Bonjour,
J'effectue un calcule d'écart type sur 15 jours en PHP mais pour des raisons pratiques je voudrais retranscrire mon code PHP en PL/SQL.
Voici mon code PHP assez simple, j'ai supprimé certaines lignes servant à rien pour la compréhension:
Comment calculer cette moyenne assez simple en php en code PL/SQL?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Premiere requete qui ramene les FS sur 15 jours et Occupation > 70 $result_FS=mysql_query('select * from MCO_fs where date = SYSDATE AND t_occup > 70 order by t_occup desc '); while ($donnee_result_FS=mysql_fetch_array($result_FS)) { $ecart=0; $sum_carre=0; $ecart_carre=0; // calcul du nombre d'enregistrements sur 15j pour chaque FS trouvé $sql_nb=" select * from MCO_fs where hostname = '" . $donnee_result_FS['hostname'] . " ' and mount_point = '" . $donnee_result_FS['mount_point'] ."' AND date <= SYSDATE AND date >= (SYSDATE-15) "; $donnee_result_nb=mysql_num_rows($result_nb); <==NB résultats $sql_sum_FS="select sum(t_occup) from MCO_fs where hostname = '" . $donnee_result_FS['hostname'] . " ' and mount_point = '" . $donnee_result_FS['mount_point'] ."' AND date <= SYSDATE AND date >= (SYSDATE-15) "; Cette requete fait la somme du taux d'occupation pour un FS sur 15 jours. $donnee_sum_FS=mysql_fetch_array($result_sum_FS); // $donnee_sum_FS['0'] est le résultat de la somme; $moyenne =$donnee_sum_FS['0']/$donnee_result_nb;
J'ai commencé comme ca mais ca fonctionne pas:
En fait comment faire une requete et ensuite une boucle avec le résultat des champs de celle-ci?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 CREATE OR REPLACE Procedure P_ECART_TYPE_QUINZE () IS CURSOR C_QUINZE IS SELECT DATEFIC, HOSTNAME, MOUNT_POINT, T_OCCUP FROM MCO_FS where DATEFIC = sysdate AND T_OCCUP > 70 ORDER BY T_OCCUP DESC; -- Déclartion des variables v$DATEFIC MCO_FS.DATEFIC%TYPE; v$HOSTNAME MCO_FS.HOSTNAME%TYPE; v$MOUNT_POINT MCO_FS.MOUNT_POINT%TYPE; v$T_OCCUP MCO_FS.T_OCCUP%TYPE; v$ECART NUMBER(10) :=0; v$SUM_CARRE NUMBER(10) :=0; v$ECART_CARRE NUMBER(10) :=0; v$MOYENNE NUMBER(10) :=0; v$NB_RESULT NUMBER(10) :=0; BEGIN OPEN C_QUINZE; LOOP FETCH C_QUINZE INTO v$DATEFIC, v$HOSTNAME, v$MOUNT_POINT, v$T_OCCUP; SELECT COUNT(*) INTO v$NB_RESULT FROM MCO_FS WHERE HOSTNAME = v$HOSTNAME and MOUNT_POINT = v$MOUNT_POINT AND DATEFIC <= SYSDATE AND DATEFIC >= (SYSDATE-15); SELECT SUM(T_OCCUP) INTO v$T_OCCUP FROM MCO_FS WHERE HOSTNAME = v$HOSTNAME AND MOUNT_POINT = v$MOUNT_POINT AND DATEFIC <= SYSDATE AND DATEFIC >= (SYSDATE-15); v$MOYENNE = v$T_OCCUP/v$NB_RESULT; END LOOP; CLOSE C_QUINZE; -- fermeture du curseur Table brute END;
Faut-il ouvrir deux cursor pour cela? Merci d'avance![]()
Partager