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