Si necesitas eliminar todos los datos de una base de datos, y no tienes ganas de pensar en el orden de los «delete from tablaXYS» para cumplir con las restricciones de integridad. Lo mas rápido es desactivar las foreign keys, eliminar todas las tablas y dejar otra vez las foreign keys como estaban.
Deshabilitar todas las foreign keys de todas las tablas:
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'
AND c.CONSTRAINT_TYPE = 'R'
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;
Volver a habilitar todas las foreign keys de todas las tablas:
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'
AND c.CONSTRAINT_TYPE = 'R'
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;