Bonsoir / bonjour à tous

J'ai un petit soucis avec les déclencheurs que je ne comprends pas très bien.

Pour mon cours SGBD, je dois gérer des nageurs qui sont placé dans des catégories selon leurs ages.
J'ai trois tables :

- Nageurs (Nrligue, Nom, AnneeNaiss, Categorie)
- Categories(Categorie, agemin, agemax)
- Infogeneral (anneeencours)

J'aimerai que quand on modifie l'année en cours dans la table Infogeneral, que les catégories des nageurs soient automatique mis à jour. j'ai mis un déclencheur dans la table Infogeneral

Je n'arrive pas à comprendre comment je pourrais faire ça. J'ai essayé avec un curseur (je ne sais pas trop à quoi ça sert mais je me dis que ca peut m'aider à sélectionner un a un les nageurs) et voici le code.

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
 
create or replace
TRIGGER TRGCATEGORIE
AFTER UPDATE ON INFOGENERALES
declare 
  annee NUMBER(4,0);
  UneCategorie char(2);
  CURSOR CurNageur is Select * from nageurs;
  UnNageur nageurs%rowtype;
 
BEGIN
    Select anneeencours into annee
    from infogenerales;
 
    open CurNageur;
    FETCH CurNageur INTO unnageur;
    while CurNageur%Found LOOP
        SELECT categories.categorie into unecategorie
        from categories, nageurs
        where nom = unnageur.nom
        and agemin <= (annee - UnNageur.anneenaiss)
        and agemax >= (annee - UnNageur.anneenaiss);
        update nageurs set categorie = unecategorie where nrligue like unnageur.nrligue;
        FETCH CurNageur into unnageur;
    end loop;
    close CurNageur;
 
EXCEPTION
  WHEN INVALID_CURSOR
    THEN DBMS_OUTPUT.PUT_LINE('Erreur Curseur CurEmp');
  WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);    
END;