Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/12/2011, 14h21   #1
Membre à l'essai
 
Inscription : novembre 2009
Messages : 93
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 93
Points : 22
Points : 22
Par défaut 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
Tonii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 14h33   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
Regarde plutôt STDDEV et VARIANCE
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/12/2011, 14h59   #3
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
D'après votre code c'est une moyenne et pas un écart-type, non ?
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 16h51   #4
Membre à l'essai
 
Inscription : novembre 2009
Messages : 93
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 93
Points : 22
Points : 22
Oui la j'ai juste mis le code pour d'abord le calcule de la moyenne, ensuite y a le reste pour l'écart type mais pour des raisons de simplification j'ai pas mis le reste.

Si je sais comment faire la moyenne en PL/SQL je pourrais ensuite continuer pour l'écart type
Tonii est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h33.


 
 
 
 
Partenaires

Hébergement Web