Hello,

Voila je suis un étudiant en licence qui cherche un peu d'aide. Je m'explique mon prof de bases de données nous a donné un TP à faire sur mysql (un TP qu'il a d’ailleurs trouvé sur le Web http://mrproof.blogspot.fr/2010/09/e...e-sqlplus.html).

Mon problème est que justement, sur ce même site, il y a un correction mais impossible de l'appliquer sur mysql. Second problème, même notre professeur ne connait pas mysql et n'y est pas arrivé. Je bloque surtout après le "DECLARE". Mysql me met une erreur lorsque j'entre "best resultat.temps%TYPE;".

J'aimerais juste comprendre comment faire en sorte d’intégrer tout ça proprement dans mysql.

Le code en entier :
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
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
-- Creation de la base de donnees source
 
create table concurrent (numero number(1) primary key, nom char(1));
 
insert into concurrent values (1, 'A');
insert into concurrent values (2, 'B');
insert into concurrent values (3, 'C');
insert into concurrent values (4, 'D');
insert into concurrent values (5, 'E');
insert into concurrent values (6, 'F');
insert into concurrent values (7, 'G');
insert into concurrent values (8, 'H');
insert into concurrent values (9, 'I');
insert into concurrent values (0, 'J');
 
create table resultat (numero_conc number(1) primary key, temps number(4,2));
 
insert into resultat values (1, 3.25);
insert into resultat values (2, 3.15);
insert into resultat values (3, NULL);
insert into resultat values (4, 3.16);
insert into resultat values (5, 3.14);
insert into resultat values (6, 3.15);
insert into resultat values (7, 3.09);
insert into resultat values (8, 3.10);
insert into resultat values (9, 3.10);
insert into resultat values (0, 3.19);
 
 
-- Remplissage de la table classement (bloc PL/SQL)
 
DECLARE
 
-- Meilleur temps
 
best resultat.temps%TYPE;
 
-- Liste des concurrents classes par temps croissant (du meilleur au moins bon)
-- On ignore les concurrents ayant abandonne
 
cursor liste is
    select nom, temps from concurrent, resultat
    where numero=numero_conc
    and temps is not null
    order by temps;
c liste%ROWTYPE;
 
-- Ecart au 1er
 
ecart resultat.temps%TYPE;
 
-- Indice de rang rg integer:=0;
 
-- Temps du concurrent precedent
      temps_prec  resultat.temps%TYPE:=-1;
 
BEGIN
 
-- Nettoyage de la table classement delete from classement;
 
-- Sauvegarde du meilleur temps
select min(temps) into best from resultat;
 
-- Parcours de la liste des concurrents et remplissage de la table classement
 
for c in liste loop
    -- Calcul de l'ecart avec le meilleur temps
         ecart:=c.temps-best;
    -- Si le temps du concurrent courant est different
    -- du temps du concurrent precedent
         if c.temps>temps_prec then
           -- Concurrent courant moins bien classe, le rang augmente de 1
                rg:=rg+1;
           insert into classement values (rg, c.nom, ecart);
       else
         -- Meme classement que le concurrent precedent, le rang n’augmente pas
         insert into classement values (NULL, c.nom, ecart);
      end if;
 
-- Mise a jour du temps du concurrent precedent (= temps courant)
temps_prec:=c.temps;
end loop;
 
END;
.
/
Merci d'avance.