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 :

Supprimer tout les clients en prenant en compte les contraintes d'intégrités


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Avatar de unix27
    Inscrit en
    Septembre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 338
    Points : 106
    Points
    106
    Par défaut Supprimer tout les clients en prenant en compte les contraintes d'intégrités
    Bonsoir, je compte créer une procédure qui prend l'ID_CLIENT comme paramètre et qui supprime les clients dans toutes les tables de la base(environ 250 tables liées entre elles avec des contraintes d’intégrités...).
    la suppression que je compte faire est de prendre la 1 table cherché l'ID_CLIENT si on le trouve alors en cherche les contraintes d'intégrité sur cette table ensuite aprés avoir supprimer les contraintes , je supprime toutes les lignes nécessaires(avec un on delete cascade) ensuite je recrée la contrainte d'intégrité sur la table ... et ainsi de suite...
    ma question est la suivante:est ce que le fait de supprimer puis de recréer des contraintes d'intégrité risque d'impacté les index ou autres ... qui sont sur la table et aussi est ce que cette méthode est bonne en sachant que je compte utiliser mon script en environnement de production
    Merci.
    à consulter avant de poster ... la FAQ de C#

  2. #2
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    Bonjour,

    La technique du ON DELETE CASCADE fonctionne avec une clé étrangère, si vous supprimez la contrainte vous ne pouvez plus utiliser cette méthode non ?

    Si vous avez défini vos contraintes avec ON DELETE CASCADE il vous suffit de supprimer la ligne de la table mère et les lignes filles seront automatiquement supprimées.
    Attention quand même aux performances avec cette méthode.

  3. #3
    Membre régulier
    Avatar de unix27
    Inscrit en
    Septembre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 338
    Points : 106
    Points
    106
    Par défaut
    Citation Envoyé par FSiebert Voir le message
    Bonjour,

    La technique du ON DELETE CASCADE fonctionne avec une clé étrangère, si vous supprimez la contrainte vous ne pouvez plus utiliser cette méthode non ?

    Si vous avez défini vos contraintes avec ON DELETE CASCADE il vous suffit de supprimer la ligne de la table mère et les lignes filles seront automatiquement supprimées.
    Attention quand même aux performances avec cette méthode.
    Les contraintes ne sont pas définies avec un ON DELETE CASCADE, et il a plus qu'une contrainte définie sur chaque table( 3 quelque fois même 10 contraintes par table...)
    est ce que la solution de supprimer puis de recréer va marcher?
    je me suis inspiré de cette idée ici:
    http://andrewfraserdba.com/2009/03/1...child-records/
    à consulter avant de poster ... la FAQ de C#

  4. #4
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    L'article dit simplement de définir les contraintes avec l'option ON DELETE CASCADE.
    Mais c'est à faire une seule fois, inutile de supprimer et recréer vos contraintes à chaque fois que vous voulez supprimer une ligne.

  5. #5
    Membre régulier
    Avatar de unix27
    Inscrit en
    Septembre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 338
    Points : 106
    Points
    106
    Par défaut
    Citation Envoyé par FSiebert Voir le message
    L'article dit simplement de définir les contraintes avec l'option ON DELETE CASCADE.
    Mais c'est à faire une seule fois, inutile de supprimer et recréer vos contraintes à chaque fois que vous voulez supprimer une ligne.
    en fait, puisque la suppression se fera par une boucle donc il va y avoir plusieurs suppression de contraintes ... pour chaque table parcourue... mais bon je ne sais pas vraiment comment procédé merci comme même je te remercie pour ta réponse
    à consulter avant de poster ... la FAQ de C#

  6. #6
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Il ne devrait pas y avoir d'impact. Vu qu'il ne s'agit que de contraintes d'intégrité référentielles (foreign key) il n'y a pas d'index implicite. Par contre ce sera très long:
    - les delete se feront ligne par ligne
    - les contraintes vont être revérifiées à chaque recréation.

    Pour cette problématique, je crois que je ferais plutôt des delete sans passer par les contraintes: on crée une table des ID à supprimer, puis on fait un delete de chaque table fille pour les ID dans cette table.

    S'il y en a beaucoup, ces instructions delete peuvent être générées, à partir de user_constraints et user_col_constraints...

    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

Discussions similaires

  1. Filtrer en prenant en compte les valeurs nulles
    Par alexis trotta dans le forum SQL
    Réponses: 6
    Dernier message: 09/12/2013, 14h46
  2. Script prenant en compte les procédures stockées modifiées
    Par devvanjier dans le forum Administration
    Réponses: 4
    Dernier message: 20/11/2012, 12h21
  3. [MySQL] exporter un tableau php vers MySQL en prenant en compte les NULL
    Par pierricktpt dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 30/03/2012, 08h51
  4. Réponses: 2
    Dernier message: 28/08/2007, 15h40
  5. Makfile prenant en compte les changements des headers
    Par mhtrinh dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 17/05/2006, 23h45

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