某系統有600張表,要求刪除業務資料,但保留基礎資料(部門和人員等)和字典資料。
如果一張表一張表刪除工作量就大了,因為外來鍵關聯決定了刪除必須有先後順序。
我們可以在刪除前禁用外來鍵,待刪除完畢之後再啟用外來鍵。
當然,最後啟用的時候發現刪除了不應該刪除的資料,因此刪除前最好做完整備份。
生成禁用外來鍵的指令碼:
select 'alter table '|| t.table_name||' disable constraint '||t.constraint_name||';'
from user_constraints t where t.constraint_type = 'R'
order by t.table_name
生成啟用外來鍵的指令碼:
select 'alter table '|| t.table_name ||' enable constraint '||t.constraint_name||';'
from user_constraints t where t.constraint_type = 'R'
order by t.table_name