Pour résoudre ce problème il faudrait supprimer ces Foreign Key (FK) avant de dropper la table, mais comment déterminer les tables qui référencent cette Foreign Key ?
La requête suivante peut vous permettre de répondre à cette question:
select * from user_constraints where R_CONSTRAINT_NAME in (select CONSTRAINT_NAME from user_constraints where table_name='NOM_TABLE_A_DROPPER') and CONSTRAINT_TYPE='R';
Le type de contrainte “R” indique qu’il s’agit d’une FK
La colonne R_CONSTRAINT_NAME contient le nom de la Primary Key référencée par la FK.
Voici un petit exemple :
SQL> CREATE TABLE PAYS 2 ( id_pays numeric(10) not null, 3 nom_pays varchar2(50) not null, 4 supplier_id numeric(10) not null, 5 CONSTRAINT pays_pk PRIMARY KEY (id_pays) 6 ); Table created. SQL> CREATE TABLE CLIENT 2 ( id_client numeric(10) not null, 3 nom_client varchar2(50) not null, 4 id_pays numeric(10) not null, 5 CONSTRAINT client_pk PRIMARY KEY (id_client), 6 CONSTRAINT fk_pays 7 FOREIGN KEY (id_pays) 8 REFERENCES PAYS(id_pays) 9 ); Table created.
Si j’essaie de dropper la table PAYS je tombe sur l’erreur ORA-02449 :
SQL> drop table pays; drop table pays * ERROR at line 1: ORA-02449: unique/primary keys in table referenced by foreign keys
La requête suivante m’indique le nom de la foreign key à dropper pour pouvoir dropper ma table :
SQL> select table_name,CONSTRAINT_NAME from user_constraints 2 where R_CONSTRAINT_NAME in (select CONSTRAINT_NAME from user_constraints where table_name='PAYS') 3 and CONSTRAINT_TYPE='R'; TABLE_NAME CONSTRAINT_NAME ------------------------------ ------------------------------ CLIENT FK_PAYS
La FK étant identifié je peux la dropper puis dropper ma table :
SQL> alter table CLIENT drop constraint FK_PAYS; Table altered. SQL> drop table pays; Table dropped.
Si on veut vraiment supprimer la table sans se soucier des éventuels FK, on peut utiliser la clause CASCADE CONSTRAINTS de la commande DROP TABLE. Cette clause indique à Oracle de supprimer automatiquement toutes les FK qui référenceraient la table à dropper :
SQL> drop table pays cascade constraints; Table dropped.
Aucun commentaire:
Enregistrer un commentaire