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 :

[ORACLE 9i]Update sur champs avec contrainte


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 16
    Par défaut [ORACLE 9i]Update sur champs avec contrainte
    Bonjour,

    J'ai un petit probleme lié à une contrainte sur un champs. Etant pas un expert en sgbd, j'espere que vous pourriez m'aider

    Mon probleme est le suivant :

    Dans une base de données que je doit exploiter, un champs d'une table (table 1) est lié à un autre champs d'une autre table (table 2) par une contrainte. Je doit mettre à jour le champs de la table 1 mais celui-ci ne veut pas se mettre à jour à cause de cette contrainte.

    Voici pour information le script des tables ainsi que la contrainte :
    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
    33
    34
     
    create table ICS_APPLI_OR_ACTEUR  (
       APP_NOM              VARCHAR2(50)                    not null,
       APP_APAC_CODE        CHAR(1)                         not null,
       APP_MEGA_ID          VARCHAR2(20)                    not null,
       APP_DESCRIPTION      VARCHAR2(255),
       APP_TYPE             CHAR(1),
       constraint PK_ICS_APPLI_OR_ACTEUR primary key (APP_NOM, APP_APAC_CODE)
    );
     
    create table ICS_FLUX  (
       TFX_TYPE             CHAR(2)                         not null,
       FLX_NUM              CHAR(3)                         not null,
       EME_APP_NOM          VARCHAR2(50)                    not null,
       EME_APP_APAC_CODE    CHAR(1)                         not null,
       DEST_APP_NOM         VARCHAR2(50)                    not null,
       DEST_APP_APAC_CODE   CHAR(1)                         not null,
       ETF_ETA              VARCHAR2(1),
       FLX_NOM              VARCHAR2(40)                    not null,
       FLX_MEGA_ID          VARCHAR2(20)                    not null,
       FLX_DESCRIPTION      VARCHAR2(255),
       FLX_DT_MAJ           DATE,
       FLX_PRODUCTION       CHAR(1),
       FLX_SUPPRESSION		INTEGER,
       constraint PK_ICS_FLUX primary key (TFX_TYPE, FLX_NUM)
    );
     
    alter table ICS_FLUX
       add constraint FK_ICS_FLUX_DESTINATA_ICS_APPL foreign key (DEST_APP_NOM, DEST_APP_APAC_CODE)
          references ICS_APPLI_OR_ACTEUR (APP_NOM, APP_APAC_CODE);
     
    alter table ICS_FLUX
       add constraint FK_ICS_FLUX_EMETTEUR_ICS_APPL foreign key (EME_APP_NOM, EME_APP_APAC_CODE)
          references ICS_APPLI_OR_ACTEUR (APP_NOM, APP_APAC_CODE);
    Les 2 contraintes FK_ICS_FLUX_DESTINATA_ICS_APPL et FK_ICS_FLUX_EMETTEUR_ICS_APPL ont quasiment la meme fonctionnalité.

    Comment je pourrais mettre à jour le champs ICS_APPLI_OR_ACTEUR.APP_NOM sans avoir de probleme avec les contraintes ? Dois-je utiliser les cascades ? (je ne sais pas si cela existe sous oracle)

    Cela fonctionnerait si je mets un "on update cascade" sur les contraintes ?

    Merci pour vos réponses

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    non, il n'y a pas d'update cascade. Mais c'est la PK que tu veux modifier ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 16
    Par défaut
    A désolé, j'ai compètement oublier de dire quel champs je voulais modifier.

    Je voudrais faire un update sur le champs ICS_APPLI_OR_ACTEUR.APP_NOM mais dès que j'execute la requete, elle me retourne une erreur de contrainte vers la table ICS_FLUX (sur les champs DEST_APP_NOM ou EME_APP_NOM) donc c'est bien la contrainte qui m'embete et donc ma question est la suivante : comment je pourrais faire pour mettre a jour le champs ICS_APPLI_OR_ACTEUR.APP_NOM sans que la contrainte ne dérange et que cela fasse un effet de cascade sur la table flux?

    merci pour la réponse :-)

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    bah cherche pas, il est là le problème. Dans la modélisation il y a un soucis. La PK ne doit JAMAIS être modifiée. Pour régler le souci tu peux ajouter une colonne ID qui sera renseigné par un trigger et une séquence (recherche incrémentation auto) et c'est cette colonne qui sera ta PK.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 16
    Par défaut
    oui je sais, mais c'est pas moi qui a designer la base :-( , c'est mon chef de projet, je lui ai dis que c'etait moisi de mettre ce champs en primary key mais bon, tout le monde les connais, ils croient tous avoir la science infuse et forcement il m'a envoyé bouler.

    Merci pour ta réponse.

    Sinon ma copine propose quelque chose mais je trouve ca vraiment pas tres propre :

    Creer un nouvelle ligne dans ICS_APPLI_OR_ACTEUR avec le nouveau nom, mettre a jour la table ICS_FLUX avec ce nouveau nom et kicker l'ancienne ligne de la table ICS_APPLI_OR_ACTEUR

  6. #6
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    c'est pas mal mais tu risques fort d'avoir des problèmes de concurrence d'accés notamment des locks.

    Je pense qu'en expliquant bien le problème avec la PK comme ça et surtout en apportant une alternative, tu arriveras à convaincre ton chef... voir même... il sera content de ton boulot

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

Discussions similaires

  1. update sur ligne avec doublon
    Par nicerico dans le forum Requêtes
    Réponses: 9
    Dernier message: 08/11/2008, 17h13
  2. Réponses: 9
    Dernier message: 21/08/2008, 17h07
  3. Réponses: 3
    Dernier message: 09/01/2008, 15h54
  4. [Update] sur champ vide
    Par userB dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/06/2007, 10h22
  5. jointure sur champ avec multiple valeur
    Par robert_trudel dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/05/2007, 17h40

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