Pour connaitre les tables qui dispose ou non de foreign key (clés étrangères –FK). j’ai conçus une petit fonction Oracle pour déterminer l’existence sur une table d’une FK par rapport a un champs.
CREATE OR REPLACE FUNCTION SU.VERIF_FK (
   LA_TABLE   IN   VARCHAR,
   LE_CHAMP   IN   VARCHAR
)
   RETURN NUMBER
IS
nbLigne NUMBER;
BEGIN
   
--- verifie pour une table si la contrainte sur un champ existe
    SELECT count(*) INTO   nbLigne 
      FROM user_constraints uc, user_cons_columns ucc1
     WHERE uc.constraint_name = ucc1.constraint_name
       AND uc.table_name = LA_TABLE 
       and ucc1.column_name = LE_CHAMP 
       and uc.constraint_type = 'R';
   
   
    return nbLigne;
END;
/
Utilisation de la fonction (récupération de toutes les colonnes qui on le champ = MON_CHAMP, et pour chacune des colonnes on vérifie les FK des tables)
select VERIF_FK(user_tab_columns.table_name,'MON_CHAMP') as FK, table_name ,data_type from user_tab_columns where column_name ='MON_CHAMP';
| 
FK | 
TABLE_NAME | 
DATA_TYPE | 
| 0 | TABLE1 | VARCHAR2 | 
| 1 | TABLE2 | VARCHAR2 | 
| 1 | TABLE3 | VARCHAR2 | 
Voila, ca ne sert pas tous les jours, mais si vous faites des opérations de maintenance et de verification de base de données (respect 3 formes normales) cela peux vous être utile
 
 
Aucun commentaire:
Enregistrer un commentaire