Bonsoir à tous,
Je sèche sur un problème de compilation de ma procédure PL/SQL.
Je suis (hyper) débutant en PL/SQL, et ce n'est pas trop ma tasse de thé...
Donc voici le schéma de ma base :
Le but est de mettre à jour le champ nombrecaloriesconsommees (qui est une addition des calories absorbées par le dragon pour chaque produit) pour chaque dragon dans la table dragon. Ce nombre de calories est donc calculé via le la colonne quantité de la table repas et le nombre de calories de la table nourriture.
Donc j'ai fait une petite procédure que vous pourrez trouver ci-dessous.
Seulement pendant la compilation j'ai ces erreurs :
Avec mes maigres connaissances en PL/SQL et malgré mes recherches sur le Net je vois pas comment les résoudre.
Ah oui et petite question, on peut déclarer un curseur sans pour autant l'initialiser dès le début ? Dans tous les exemples que j'ai pu voir il était directement initialisé...
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 CREATE OR REPLACE PROCEDURE update_nb_calories IS CURSOR cursor_dragons IS SELECT dragon FROM dragons; CURSOR cursor_produits; un_dragon cursor_dragons%ROWTYPE; un_produit cursor_produits%ROWTYPE; nb_calories NUMBER:=0; tmp_calories NUMBER:=0; tmp_quantite NUMBER:=0; BEGIN /* On fait une boucle pour mettre à jour chaque dragon */ FOR un_dragon IN cursor_dragons LOOP cursor_produits:=SELECT produit FROM repas WHERE dragon = un_dragon.dragon; /* On fait une boucle pour récupérer les calories absorbées par le dragon courant */ FOR un_produit IN cursor_produits LOOP tmp_calories:=SELECT calories FROM nourriture WHERE produit = un_produit.produit; nb_calories:=nb_calories+tmp_calories; tmp_quantite:=SELECT quantite FROM repas WHERE produit = un_produit.produit; nb_calories:=nb_calories*tmp_quantite; tmp_calories:=0; tmp_quantite:=0; END LOOP; /* On met à jour le nombre de calories pour le dragon courant */ UPDATE dragons SET dragons.nombrecaloriesconsommees = nb_calories WHERE dragons.dragon = un_dragon.dragon; nb_calories:=0; END LOOP; END; / /*execute update_nb_calories; /*/
Merci d'avance pour votre aide !
Bonne soirée !
Partager