Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
23 juillet 2013 2 23 /07 /juillet /2013 14:46

Hello !

 
Cette fois ci, j'ai décidé de parler d'une fonctionnalité SQL de la 12c que nous avons presque tous esperé avoir un jour, j'ai nommé le truncate cascade.
Un petit exemple valant mieux qu'un long discours, commencons par créer un petit jeu de test.

 sqlplus lao/lao SQL> create table clients (idclient number primary key); Table created. SQL> create table factures(idfacture number primary key,idclient number); Table created. SQL> alter table factures add constraint fk_client foreign key (idclient) references clients(idclient) on delete cascade; Table altered. SQL> insert into clients values (1); 1 row created. SQL> insert into factures values (1,1); 1 row created. SQL> commit; Commit complete. 

 

Maintenant que notre petit jeu de test est prêt, je vais tenter un truncate de la table clients

 SQL> truncate table clients; truncate table clients * ERROR at line 1: ORA-02266: unique/primary keys in table referenced by enabled foreign keys 

 

On obtient ici l'erreur classique que l'on aurait obtenu dans une version antérieure d'Oracle. Alors bien sur, il existait des moyens de contournement en désactivant les contraintes,... Mais avouons quand même que c'est plus pratique en ajoutant juste la clause cascade à notre commande truncate..

 SQL> truncate table clients cascade; Table truncated. SQL> select count(*) from clients; COUNT(*) ---------- 0 SQL> select count(*) from factures; COUNT(*) ---------- 0 

 

Simple mais efficace !

 

@++
LAO 

 

Partager cet article
Repost0

commentaires

B
<br /> Merci<br />
Répondre
L
<br /> Hélas ça ne marche que pour les contraintes ON DELETE CASCADE. J'aurais préféré un truc plus radical qui marche comme le DISABLE PRIMARY KEY CASCASE (indépendamment de la clause ON DELETE)<br />
Répondre