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 :

A-12991: la colonne est référencée dans une contrainte multi-colonnes


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 11
    Points
    11
    Par défaut A-12991: la colonne est référencée dans une contrainte multi-colonnes
    Bonjour,
    Avant de faire des opérations sur la structure des tables, je dois effectuer quelques contrôles.

    J'ai interrogé toutes les tables suivantes :
    ALL_CONSTRAINTS
    ALL_CONS_COLUMNS
    ALL_CONS_OBJ_COLUMNS
    DBA_CONSTRAINTS
    DBA_CONS_COLUMNS
    DBA_CONS_OBJ_COLUMNS
    USER_CONSTRAINTS
    USER_CONS_COLUMNS
    USER_CONS_OBJ_COLUMNS

    et je n'y ai pas trouvé d'informations utiles.

    Comment identifier les tables avec une colonne référencée dans une contrainte multi-colonnes ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Êtes-vous sûr ?
    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
    35
    36
    create table tab
    (
        c1   integer,
        c2   integer,
        constraint chk_addition
          check (c1 + c2 >= 10)
    );
    -- Table created.
     
    insert into tab (c1, c2) values (5, 8);
    -- 1 row created.
     
    insert into tab (c1, c2) values (5, 2);
    -- ORA-02290: violation de contraintes (CHK_ADDITION) de vérification
     
    commit;
    --Commit complete.
     
    select constraint_name, constraint_type, table_name, search_condition
      from ALL_CONSTRAINTS
     where owner = user
       and constraint_name = 'CHK_ADDITION';
     
    CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME      SEARCH_CONDITION
    --------------- --------------- --------------- ----------------
    CHK_ADDITION    C               TAB             c1 + c2 >= 10
     
    select constraint_name, table_name, column_name
      from ALL_CONS_COLUMNS
     where owner = user
       and constraint_name = 'CHK_ADDITION';
     
    CONSTRAINT_NAME TABLE_NAME      COLUMN_NAME    
    --------------- --------------- ---------------
    CHK_ADDITION    TAB             C1             
    CHK_ADDITION    TAB             C2

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Oui je suis sûr que ce n'est pas une contrainte multi-colonne.
    Je fais le même test que toi.

    Ci-dessous , plus d'info. sur deux colonnes avec contraintes (mono-colonne) , je peux en supprimer une mais pas l'autre ?
    Dans quelle table puis-je détecter cette différence ?
    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
    35
    36
    37
    38
    39
    SELECT constraint_name, constraint_type, table_name, search_condition
      FROM ALL_CONSTRAINTS t
     WHERE owner = 'CISADM' and 
     (
     (table_name = 'CM_C_PAR_PPA' AND constraint_name = 'SYS_C0035143')
     or
     (table_name = 'CM_C_PIECE_CPT_LN' AND constraint_name = 'SYS_C0035109')
     )
    ;
    
     
    CONSTRAINT_NAME                CONSTRAINT_TYPE TABLE_NAME                     SEARCH_CONDITION
    ------------------------------ --------------- ------------------------------ --------------------------------------------------------------------------------
    SYS_C0035109                   C               CM_C_PIECE_CPT_LN              "PIECE_LN_LB" IS NOT NULL
    SYS_C0035143                   C               CM_C_PAR_PPA                   "CALC_PROG_DT" IS NOT NULL
    
    
    SELECT * FROM ALL_CONS_COLUMNS 
    WHERE owner = 'CISADM' and 
     (
     (table_name = 'CM_C_PAR_PPA' AND constraint_name = 'SYS_C0035143')
     or
     (table_name = 'CM_C_PIECE_CPT_LN' AND constraint_name = 'SYS_C0035109')
     )
    ;
    
    OWNER                          CONSTRAINT_NAME                TABLE_NAME                     COLUMN_NAME                                                                        POSITION
    ------------------------------ ------------------------------ ------------------------------ -------------------------------------------------------------------------------- ----------
    CISADM                         SYS_C0035109                   CM_C_PIECE_CPT_LN              PIECE_LN_LB                                                                      
    CISADM                         SYS_C0035143                   CM_C_PAR_PPA                   CALC_PROG_DT                                                                     
    
    ALTER TABLE CM_C_PIECE_CPT_LN DROP ( PIECE_LN_LB)
     
    ORA-12991: la colonne est référencée dans une contrainte multi-colonnes
     
    ALTER TABLE CM_C_PAR_PPA DROP (CALC_PROG_DT);
    
    Table altered

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Que donne cette requête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
      FROM ALL_CONS_COLUMNS 
     WHERE owner = 'CISADM'
       AND table_name = 'CM_C_PIECE_CPT_LN'
    ORDER BY column_name asc

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    OWNER                          CONSTRAINT_NAME                TABLE_NAME                     COLUMN_NAME                                                                        POSITION
    ------------------------------ ------------------------------ ------------------------------ -------------------------------------------------------------------------------- ----------
    CISADM                         SYS_C0035110                   CM_C_PIECE_CPT_LN              ACCT_GEN_ID                                                                      
    CISADM                         PK_CM_C_PIECE_CPT_LN           CM_C_PIECE_CPT_LN              NUM_SEQ                                                                                   2
    CISADM                         SYS_C0035108                   CM_C_PIECE_CPT_LN              NUM_SEQ                                                                          
    CISADM                         SYS_C0035111                   CM_C_PIECE_CPT_LN              PIECE_AMT                                                                        
    CISADM                         SYS_C0035109                   CM_C_PIECE_CPT_LN              PIECE_LN_LB                                                                      
    CISADM                         SYS_C0035107                   CM_C_PIECE_CPT_LN              PIECE_NBR                                                                        
    CISADM                         PK_CM_C_PIECE_CPT_LN           CM_C_PIECE_CPT_LN              PIECE_NBR                                                                                 1
    CISADM                         SYS_C0035112                   CM_C_PIECE_CPT_LN              SENS_LN                                                                          
    CISADM                         SYS_C0035113                   CM_C_PIECE_CPT_LN              VERSION

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT *
      FROM ALL_CONS_COLUMNS 
     WHERE owner           = 'CISADM'
       AND table_name      = 'CM_C_PIECE_CPT_LN'
       AND constraint_name = 'PK_CM_C_PIECE_CPT_LN'
     
    OWNER                          CONSTRAINT_NAME                TABLE_NAME                     COLUMN_NAME                                                                        POSITION
    ------------------------------ ------------------------------ ------------------------------ -------------------------------------------------------------------------------- ----------
    CISADM                         PK_CM_C_PIECE_CPT_LN           CM_C_PIECE_CPT_LN              PIECE_NBR                                                                                 1
    CISADM                         PK_CM_C_PIECE_CPT_LN           CM_C_PIECE_CPT_LN              NUM_SEQ                                                                                   2
    Il y a bien un contrainte multi-colonne (PK) mais ma colonne n'y est pas.
    C'est la même chose pour l'autre colonne qui je peux supprimer

Discussions similaires

  1. Afficher les TOP 10 dans une ListBox multi colonnes
    Par Hadi2015 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 03/03/2015, 22h49
  2. [XL-2010] Sélectionner et copier avec plusieurs critères dans une listeview multi colonnes.
    Par polysandre dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 21/11/2014, 10h02
  3. Colonne de référence dans une relation ManyToMany
    Par Rony Rauzduel dans le forum Doctrine2
    Réponses: 1
    Dernier message: 10/07/2013, 10h41
  4. Réponses: 2
    Dernier message: 28/04/2010, 18h09
  5. Supprimer une colonne d'une feuille si elle est vide dans une autre
    Par xave dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 27/02/2008, 14h05

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