IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

on update cascade en PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 18
    Par défaut on update cascade en PL/SQL
    Bonjour tout le monde,

    Je sais que la contrainte ON UPDATE CASCADE n'existe pas sous Oracle et qu'il faut créer un trigger pour mettre en place cela.

    Étant débutant dans la matière, je ne sais pas trop comment faire cela, avez vous un exemple à me montrer pour que je puisse m'en inspirer ?

    D'habitude j'utilise beaucoup la FAQ ou les tutoriels mais là je ne trouve rien.

    J'ai trouvé quelques sites qui parlent de ce sujet mais ils sont tous en anglais !
    (Mon niveau d'anglais est très faible, j'ai commencé depuis quelques mois)

    C'est pourquoi je fais appel à vous

    Si possible, j'aimerais pas seulement un exemple mais également une bonne explication sur la mise en place de cette contrainte.

    Je vous remercie par avance.

  2. #2
    Membre éclairé Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Par défaut
    Voilà un exemple :
    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
     
    CREATE OR REPLACE TRIGGER DBO.UPDATE_COURSES 
    AFTER UPDATE OF COURSE_ID ON DBO.COURSES 
    REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
    DECLARE
      V_NEWID VARCHAR2 (6);
      V_OLDID  VARCHAR2 (6);
    BEGIN
      V_NEWID := :NEW.COURSE_ID;
      V_OLDID := :OLD.COURSE_ID;
     
      UPDATE STUDENTS_COURSES
      SET COURSE_ID = V_NEWID
      WHERE COURSE_ID = V_OLDID;
    END;
    Je pense que cette exemple est correct, mais je n'en suis pas certain.

    Pour l'explication, je pense qu'il vaut mieux que tu attendes une réponse d'une autre personne ... lol

  3. #3
    Membre éclairé Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Par défaut
    Je profite de ce post pour poser une question

    Lorsqu'un CREATE TABLE contient plusieurs FOREIGN KEY (avec plusieurs clefs étrangères dans un FOREIGN KEY), comment réalise-t-on le trigger pour l'UPDATE CASCADE ?

    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
    CREATE TABLE T2_A (
      ID_A INTEGER  NOT NULL   IDENTITY ,
      ID_R INTEGER  NOT NULL  ,
      NUM_P SMALLINT  NOT NULL  ,
      NUM_L SMALLINT  NOT NULL    ,
    PRIMARY KEY(ID_A)    ,
      FOREIGN KEY(NUM_L)
        REFERENCES T1_L  (NUM_L)
          ON DELETE CASCADE
          ON UPDATE CASCADE,
      FOREIGN KEY(ID_R, NUM_P)
        REFERENCES T1_R(ID_R, NUM_P)
          ON DELETE CASCADE
          ON UPDATE CASCADE);

  4. #4
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Eh beh on met autant d'update que de tables avec des FK !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BEGIN
      UPDATE table1 SET table1.cle=:new.valeur1
      WHERE table1.cle:=:old.valeur1;
     
      UPDATE table2 SET table2.cle=:new.valeur2
      WHERE table2.cle:=:old.valeur2;
      -- etc..

  5. #5
    Membre éclairé Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Par défaut
    Ah je pensais que ça allait être plus compliqué que ça parce que dans un FOREIGN KEY, j'ai deux clefs ...

    Comment j'écris ça dans le trigger ?

  6. #6
    Membre éclairé Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Par défaut
    Je fais comme ça ?

    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
     
    Create trigger or replace update_T1_L
    After update on T1_L
    Begin
    Update T2_A set NUM_L = :new.NUM_L
    Where NUM_L = :old.NUM_L;
     
    /
    End
     
    Create trigger or replace update_T1_R
    After update on T1_R
    Begin
    Update T2_A set ID_R = :new.ID_R
    Where ID_R = :old.ID_R;
     
    Update T2_A set NUM_P = :new.NUM_P
    Where NUM_P = :old.NUM_P;
     
    /
    End
    Je ne suis pas sûr de le faire sur les bonnes tables, pas sûr des syntaxes également ...
    Les tables sont bonnes ?
    Je ne me trompe pas dans l'utilisation des champs ?
    Doit-on préciser un champ juste après le AFTER UPDATE ?

Discussions similaires

  1. Fonction UPDATE dans un ADOQuery - SQL
    Par yanba dans le forum Bases de données
    Réponses: 1
    Dernier message: 18/03/2006, 13h53
  2. ON UPDATE CASCADE d'après la doc
    Par albertl dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/11/2005, 22h15
  3. update pour calcul pourcentage (SQL SERVER 2000)
    Par meufeu dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/09/2005, 09h04
  4. Pb avec ON DELETE/UPDATE CASCADE
    Par trotters213 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 09/03/2005, 11h55
  5. UPDATE multi-tables sous SQL Server
    Par Cybernet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 25/03/2004, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo