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

Oracle Discussion :

Déprogrammer une contrainte


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 915
    Par défaut Déprogrammer une contrainte
    Bonjour à tous et à toutes,
    Voilà j'aimerais savoir comment en PL/SQL on peut déprogrammer une contrainte sur une table et la reprogrammer ensuite, dans le cas ou cette contrainte empêche de supprimer un enregistrement par exemple: c'est mon cas en tout cas.
    Merçi
    A +

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 47
    Par défaut
    Bonjour,

    Une contrainte Oracle est vérifiée selon son status visible avec la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select status from user_constraints where constraint_name = 'ma_condition';
    Pour activer ou désactiver une contrainte :
    activer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    alter table
       ma_table
    ENABLE constraint
       ma_contrainte;
    ou

    désactiver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    alter table
       ma_table
    DISABLE constraint
       ma_contrainte;
    Bonne journée.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 915
    Par défaut
    Merci pour votre réponse, mais j'ai essayé de rajouter vos lignes dans mon trigger et ça ne marche pas voiçi le trigger:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE TRIGGER  "Suppr Emission" 
    after delete on Emission
    for each row
    declare
    
    wcodpers char(100);
    begin
    ALTER TABLE presente disable constraint FK_CODEMIS;
    select personne.codpers into wcodpers from presente,personne where presente.codemis=:old.codemis and presente.codpers=personne.codpers and personne.nch=:old.nch;
    insert into Hist_Present values(:old.codemis,wcodpers,:old.nch,:old.dat_deb_dif,sysdate);
    ALTER TABLE presente enable constraint FK_CODEMIS;    
    end;
    Si vous avez une idée merçi
    A +

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 47
    Par défaut
    Les commandes ALTER sauf exception doivent être fait hors de procédures ou de triggers. Le fait de vouloir activer/désactiver une contrainte dynamiquement signifie je pense que les conditions de la contrainte ou d'exécution du trigger n'est pas bonne.

    ça ne marche pas
    Qu'entendez vous par là? Il y a une erreur Oracle? Un problème de comportement?

    De mon côté je ne vois pas de raison pour que ça ne marche pas.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 47
    Par défaut
    Je n'ai pas fait attention en lisant votre code. Mais le fait de désactiver une contrainte pour insérer un enregistrement ne répondant pas à la contrainte, puis réactiver la contrainte en question par la suite : La contrainte ne peut pas être réactivée normalement puisqu'elle ne peut pas se vérifier pour l'enregistrement en question.
    Pour activer une contrainte, il faut qu'elle puisse être validée pour les enregistrements existants sinon Oracle renvoie une erreur -02293 qui empêche de réactiver la contrainte.

    Bonne journée.
    Cordialement,

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 915
    Par défaut
    Merçi de vous êtes "penché" sur mon problème mais je pense que le problème viens de l'insertion dans mon trigger des commandes ALTER car à la compil j'ai ce message :

    5 1 PLS-00103: Symbole "ALTER" rencontré à la place d'un des symboles suivants : begin case declare exit for goto if loop mod null pragma raise return select update while with <
    Je vous dois de m'expliquer un peu plus en vous présentant la base sur laquelle je travaille :

    Les tables en questions :
    Emission(CodEmis,NomEmis,.....);
    Histo_Present(CodEmis,CodPers,Nch,Date_Deb,Date_Fin);içi CodEmis est à la fois clé primaire et clé étrangère de la table Emission (2 contraintes donc)
    Présente(CodEmis,CodPers); içi CodEmis est clé étrangère de la table Emission et CodPers d'une autre table Personne

    Je dois écrire un trigger qui à la suppression d'une emission de la table Emission m'insère automatiquement un enregistrement dans la table Histo_Present, le problème est que je dois renseigner le champ codPers que je "récupère" dans la table Presente avec cette reqûete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select personne.codpers into wcodpers from presente,personne where presente.codemis=:old.codemis and presente.codpers=personne.codpers and personne.nch=:old.nch;
    et comme il existe une contrainte da

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

Discussions similaires

  1. [C#] [ADO.NET] Récupérer une contrainte de vérification
    Par crjo dans le forum Accès aux données
    Réponses: 3
    Dernier message: 13/04/2005, 17h30
  2. [DEBUTANT] Qu'est-ce qu'une contrainte applicative ?
    Par Invité dans le forum Débuter
    Réponses: 2
    Dernier message: 16/02/2005, 14h18
  3. [SYBASE ASE] Rajouter une contrainte null sur une colonne
    Par Little_Goldo dans le forum Sybase
    Réponses: 1
    Dernier message: 09/02/2005, 10h48
  4. [Interbase] Mettre une contrainte sur un champ
    Par mika dans le forum InterBase
    Réponses: 2
    Dernier message: 26/01/2005, 14h04
  5. [ contrainte ] supprimer une contrainte DB2
    Par hocinema dans le forum DB2
    Réponses: 4
    Dernier message: 08/01/2004, 15h01

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