一、禁止所有的外鍵約束
在pl/sql developer下執行如下語句:
SELECT 'ALTER TABLE ' || table_name || ' disable CONSTRAINT ' || constraint_name || ';' FROM user_constraints where CONSTRAINT_TYPE = 'R';
把查詢出來的結果拷出來在pl/sql developer時執行。
先看看user_constraints是什么
user_constraints是表約束的視圖,描述的是約束類型(constraint_type)是什么,屬於哪些表(table_name),如果約束的類型為R(外鍵)的話,那么r_constraint_name字段存放的就是被引用主表中的主鍵約束名。
先看看user_cons_columns是什么
user_cons_columns是表約束字段的視圖,說明表中的和約束相關的列參與了哪些約束。這些約束有主鍵約束,外鍵約束,索引約束.
兩者可以通過(owner,constraint_name,table_name)關聯
select
a.owner 外鍵擁有者,
a.table_name 外鍵表,
substr(c.column_name,1,127) 外鍵列,
b.owner 主鍵擁有者,
b.table_name 主鍵表,
substr(d.column_name,1,127) 主鍵列
from
user_constraints a,
user_constraints b,
user_cons_columns c,
user_cons_columns d
where
a.r_constraint_name=b.constraint_name
and a.constraint_type='R'
and b.constraint_type='P'
and a.r_owner=b.owner
and a.constraint_name=c.constraint_name
and b.constraint_name=d.constraint_name
and a.owner=c.owner
and a.table_name=c.table_name
and b.owner=d.owner
and b.table_name=d.table_name
用delete或truncate刪除用戶所有表的內容
SELECT 'DELETE FROM '|| table_name || ';' FROM USER_TABLES
ORDER BY TABLE_NAME;
或
SELECT 'TRUNCATE TABLE '|| table_name || ';' FROM USER_TABLES
ORDER BY TABLE_NAME;
用第一步類似的方法操作。要注意的一點是,若表的數據有觸發器相關聯,只能用truncate語句,不過truncate語句不能回滾,所以時要注意
三、把已經禁止的外鍵打開
SELECT 'ALTER TABLE ' || table_name || ' enable CONSTRAINT ' || constraint_name || ';' FROM user_constraints where CONSTRAINT_TYPE = 'R';
查出來的表結果是執行語句:如下
1 TRUNCATE TABLE A;
2 TRUNCATE TABLE ACCEPT_SN;
3 TRUNCATE TABLE B;
