IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

escartefigue

DB2 for Z/OS : analyser les contraintes CHECK et REFERENCE

Note : 3 votes pour une moyenne de 3,00.
par , 29/11/2023 à 11h49 (814 Affichages)
Voici des requêtes qui permettent d'extraire du catalogue les informations relatives aux contraintes de contenu (CHECK) et de référence à des clefs étrangères (REFERENCE FOREIGN KEY) sur DB2 for Z/OS
Les noms d'objets sont restitués sur 8 caractères, car c'est la longueur maximale la plus souvent utilisée dans le monde Z/OS pour des raisons historiques, à adapter si besoin.

Contraintes de contenu :

Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
-- liste des contraintes CHECK                             
   select substr(TBOWNER,   01, 08)  as "Schema"           
        , substr(TBNAME,    01, 08)  as "Table"            
        , substr(CHECKNAME, 01, 30)  as "Nom"              
        , CHECKCONDITION             as "Cond"             
   from  SYSIBM.SYSCHECKS                                  
   where TBOWNER = 'SCH1'                                  
   order by 1, 2, 3                                        
   ;


Contraintes de référence à des clefs étrangères :

Code SQL : 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
-- Cette requete analyse les contraintes d'intégrité entre tables               
   set current schema = 'SYSIBM'                                  
   ;                                                              
   with CT1(SCH1, TAB1) as                                        
       (select 'SCH0', 'T020' from SYSIBM.SYSDUMMY1   union all   
        select 'SCH0', 'T021' from SYSIBM.SYSDUMMY1               
       )                                                          
   select distinct                                                
          substr(RL.CREATOR, 01, 4)     as "Schm"                 
        , substr(RL.REFTBNAME, 01, 08)  as "ParentTb"             
        , substr(RL.TBNAME, 01, 08)     as "Child Tb"             
        , substr(RL.RELNAME, 01, 20)    as "Constr"               
        , RL.DELETERULE                 as "OnDel"                
        , RL.ENFORCED                   as "Enf"                  
        , RL.CHECKEXISTINGDATA          as "Chk"                  
        , substr(KY.COLNAME, 01, 08)    as "ParenCol"             
        , KY.COLNO                      as "PColNo"               
        , substr(FK.COLNAME, 01, 08)    as "ChildCol"             
        , FK.COLNO                      as "CColNo"               
   from  SYSRELS  RL                                              
   inner join CT1 CT                                              
      on (RL.CREATOR      = CT.SCH1  and  RL.TBNAME    = CT.TAB1) 
      or (RL.REFTBCREATOR = CT.SCH1  and  RL.REFTBNAME = CT.TAB1) 
   inner join SYSFOREIGNKEYS FK                                   
      on FK.CREATOR = RL.CREATOR                                  
     and FK.RELNAME = RL.RELNAME                                  
   left  join SYSKEYS KY                                          
      on KY.IXCREATOR=CT.SCH1                                     
     and KY.IXNAME   =RL.IXNAME                                   
     and KY.COLSEQ   =FK.COLSEQ                                   
   order by "ParentTb"                                            
          , "Child Tb"                                            
          , "Constr"                                              
          , "CColNo"                                              
   ;

On rappellera que dans une base de données relationnelle, seules les les contraintes de type REFERENCE permettent de garantir l'intégrité parent/enfant.
Malheureusement, on rencontre un grand nombre de sites dans lesquels aucune contrainte de ce type n'est installée, sous toutes sortes de prétextes, parfois avancés par les DBA eux-mêmes... et tant pis pour l'intégrité !
Jusqu'à aujourd'hui, je n'ai jamais vu de site dépourvu de contrainte REFERENCE et sur lequel aucun orphelin n'existait...

Envoyer le billet « DB2 for Z/OS : analyser les contraintes CHECK et REFERENCE » dans le blog Viadeo Envoyer le billet « DB2 for Z/OS : analyser les contraintes CHECK et REFERENCE » dans le blog Twitter Envoyer le billet « DB2 for Z/OS : analyser les contraintes CHECK et REFERENCE » dans le blog Google Envoyer le billet « DB2 for Z/OS : analyser les contraintes CHECK et REFERENCE » dans le blog Facebook Envoyer le billet « DB2 for Z/OS : analyser les contraintes CHECK et REFERENCE » dans le blog Digg Envoyer le billet « DB2 for Z/OS : analyser les contraintes CHECK et REFERENCE » dans le blog Delicious Envoyer le billet « DB2 for Z/OS : analyser les contraintes CHECK et REFERENCE » dans le blog MySpace Envoyer le billet « DB2 for Z/OS : analyser les contraintes CHECK et REFERENCE » dans le blog Yahoo

Mis à jour 29/01/2025 à 09h03 par escartefigue

Catégories
Sans catégorie

Commentaires