Les contraintes d'intégrités type primary_key, check...sont utiles car elles allègent la programmation. Parfois il est souhaitable de s'en dispenser un temps, pour les réactiver par la suite.

Ceci est un impératif lors d'un chargement massif de données via imp, datapump ou SQL*Loader.

Voici deux scripts en PL/SQL permettant la désactivation et la réactivation des contraintes de la base. Important les contraintes sont désactivées pour un schéma et non sur l'ensemble de la base.

Désactivation

BEGIN
  FOR c IN
  (SELECT c.owner, c.table_name, c.constraint_name
   FROM user_constraints c, user_tables t
   WHERE c.table_name = t.table_name
   AND c.status = 'ENABLED'
   ORDER BY c.constraint_type DESC)
  LOOP
    dbms_utility.exec_ddl_statement('alter table ' || c.owner || '.' || c.table_name || ' disable constraint ' || c.constraint_name);
  END LOOP;
END;

Activation

BEGIN
  FOR c IN
  (SELECT c.owner, c.table_name, c.constraint_name
   FROM user_constraints c, user_tables t
   WHERE c.table_name = t.table_name
   AND c.status = 'DISABLED'
   ORDER BY c.constraint_type)
  LOOP
    dbms_utility.exec_ddl_statement('alter table ' || c.owner || '.' || c.table_name || ' enable constraint ' || c.constraint_name);
  END LOOP;
END;