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

SQL Oracle Discussion :

Suppression d'un enregistrement et répercussion en cascade [11g]


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Apprenti en développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Apprenti en développement logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 67
    Points : 97
    Points
    97
    Par défaut Suppression d'un enregistrement et répercussion en cascade
    Bonjour,

    Depuis ce matin je recherche sur internet sans grande réponse car je patauge un peu sous oracle.

    Je m'explique :
    J'ai 2 tables : (je simplifie)
    CLIENT(numcli, nomcli);
    VOITURE(numvoit, nomvoit, numcli);

    Je souhiaterais supprimer un enregistrements de ma table client et de le répercuter sur la table voiture pour ne pas avoir un numéro de client qui ne rapporte à rien.

    J'ai tenté :
    DELETE FROM CLIENT WHERE numcli= 5;

    Mais forcément ya aucune cascade dans ça.

    J'ai testé aussi plusieurs choses vues sur internet : (pas forcément juste)
    DELETE FROM CLIENT CASCADE WHERE numcli= 5;
    DELETE FROM CLIENT WHERE numcli= 5 CASCADE;


    Pouvez vous m'aidez s'il vous plait, car la je sèche fortement.

    Cordialement.

    M4itreG

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir Florian,


    Si vous voulez que la suppression d’un client entraîne automatiquement la suppression de ses voitures, vous pouvez coder l’action de compensation CASCADE au sein de l’instruction CREATE (ou ALTER) TABLE VOITURE (et seulement là) :


    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE VOITURE
    (
            numvoit    Number(...)      NOT NULL
          , nomvoit    Varchar(...)     NOT NULL
          , numcli     Number (...)     NOT NULL 
        , CONSTRAINT VOITURE_PK PRIMARY KEY (numvoit)
        , CONSTRAINT VOITURE_CLIENT_FK FOREIGN KEY (numcli)
              REFERENCES CLIENT (numcli) ON DELETE CASCADE
    ) ;

    Dans ces conditions, l’instruction suivante fonctionne :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
     DELETE FROM CLIENT WHERE numcli = 5 ;

    Sauf bien sûr, si la table VOITURE est elle-même une référence pour une autre table qui justement contient au moins une ligne où il est fait référence à une des voitures candidates à la suppression...

    Mais de toute façon, ça pourrait être très dangereux si vous travailliez par exemple pour une société de vente de voitures à crédit... Auquel cas, il serait préférable de ne pas coder « ON DELETE CASCADE » au niveau de la table, et de préférence commencer par supprimer les voitures du client en question :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
     DELETE FROM VOITURE WHERE numcli = 5 ;

    Puis de supprimer le client si la suppression de ses voitures s’est bien passée :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
     DELETE FROM CLIENT WHERE numcli = 5 ;


    Votre problème vaut pour tous les SGBD relationnels.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    Membre régulier
    Homme Profil pro
    Apprenti en développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Apprenti en développement logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 67
    Points : 97
    Points
    97
    Par défaut
    Merci beaucoup de ta réponse rapide et complète.

    Je pensais que la CASCADE se faisait sur le DELETE et non à la création de la base.


    Très bonne continuation à toi.

    Cordialement


    M4itreG

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression d'un enregistrement
    Par charliejo dans le forum Bases de données
    Réponses: 7
    Dernier message: 16/03/2006, 11h13
  2. [VB][rdo] Strategie de suppression massive d'enregistrements
    Par Bicky dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 12/10/2005, 14h12
  3. suppression automatique des enregistrements
    Par abdou.sahraoui dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/08/2005, 13h45
  4. [VB.NET]Suppression d'un enregistrement dans un DataGrid
    Par San Soussy dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/06/2005, 10h30
  5. Suppression d'un enregistrement
    Par denisfavre dans le forum IHM
    Réponses: 3
    Dernier message: 04/10/2004, 11h03

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