Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Débuter
Débuter Forum d'entraide pour débuter avec Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/02/2011, 14h48   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 8
Points : 4
Points : 4
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
HLM59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 15h06   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Êtes-vous sûr ?
Code :
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
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 16h06   #3
Invité de passage
 
Inscription : décembre 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 8
Points : 4
Points : 4
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 :
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
HLM59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 16h18   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Que donne cette requête ?
Code :
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
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 16h27   #5
Invité de passage
 
Inscription : décembre 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 8
Points : 4
Points : 4
Code :
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
HLM59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 16h56   #6
Invité de passage
 
Inscription : décembre 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 8
Points : 4
Points : 4
Code :
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
HLM59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h17.


 
 
 
 
Partenaires

Hébergement Web