Procédure calcul écart type
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:
Code:
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; |
Comment calculer cette moyenne assez simple en php en code PL/SQL?
J'ai commencé comme ca mais ca fonctionne pas:
Code:
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; |
En fait comment faire une requete et ensuite une boucle avec le résultat des champs de celle-ci?
Faut-il ouvrir deux cursor pour cela? Merci d'avance :ccool: