mardi 21 juin 2011

ORACLE - Identifier les lignes de dépendances entre les tables lors d'une activation de FK

Identifier les lignes de dépendances entre les tables lors d'une activation de FK

Erreur suivante :

ORA-39083: Echec de la création du type d'objet REF_CONSTRAINT avec erreur :
ORA-02298: impossible de valider (GC901.CFK) - clés parents introuvables

--> dans le schéma correspondant, @rdbms/admin/utlexcpt.sql

cette fonction créée une table EXCEPTIONS

--> Lancer l'ordre de création de FK en ajoutant EXCEPTIONS INTO EXCEPTIONS à la fin:

ALTER TABLE TABLE_NAME ADD CONSTRAINT "FK" FOREIGN KEY ("COLUMN_NAME") REFERENCES TABLE_NAME_DIST ("COLUMN_NAME") ON DELETE CASCADE ENABLE EXCEPTIONS INTO EXCEPTIONS

--> Puis faire une requête sur la table EXCEPTIONS

SQL> select * from EXCEPTIONS;

ROW_ID             OWNER                          TABLE_NAME    CONSTRAINT
------------------------------------------------------------------------------------------------------------------------
AAIQZkAAAAAEBjpAAF GC901                 TABLE_NAME  FK

--> Faire un delete sur la ligne correspondante

delete from  TABLE_NAME where ROWID='AAIQZkAAAAAEBjpAAF';
commit

--> et relancer l'ordre de création de la FK sans EXCEPTIONS

ALTER TABLE  TABLE_NAME ADD CONSTRAINT "FK_NAME" FOREIGN KEY ("COLUMN_NAME") REFERENCES TABLE_NAME_DIST ("COLUMN_NAME") ON DELETE CASCADE ENABLE

normalement c'est ok

3 commentaires:

  1. D'où sort la table "EXCEPTION" ? Elle n'existe pas dans la base que j'utilise.
    J'en déduit qu'il ne s'agit pas d'une table système d'Oracle mais bien d'une table que je dois créer.

    Vous pouvez me le confirmer ?
    Je pense que tout le monde se pose la question en lisant votre article.

    RépondreSupprimer
    Réponses
    1. "EXCEPTIONS" avec un "S". Je n'ai pas fait de faute lors de mes tests. Ma question est toujours d'actualité.

      Supprimer
  2. Bonjour,
    @rdbms/admin/utlexcpt.sql
    cette fonction créée une table EXCEPTIONS ...

    RépondreSupprimer