注:本文來源於《oracle查詢某張表的外鍵(最終解決辦法)》html
select b.table_name, b.column_name from user_constraints a inner join user_cons_columns b on a.constraint_name = b.constraint_name where a.r_constraint_name in ( select e.constraint_name from user_constraints e where e.table_name = 'GK_ZWVCH' )
select a.owner, --主鍵擁有者 a.table_name, --主鍵表 b.column_name, --主鍵列 c.OWNER, --外鍵擁有者 c.table_name, --外鍵表 d.column_name --外鍵列 from user_constraints a left join user_cons_columns b on a.constraint_name=b.constraint_name left join user_constraints c on c.R_CONSTRAINT_NAME=a.constraint_name left join user_cons_columns d on c.constraint_name=d.constraint_name where a.constraint_type='P' and a.table_name='GK_ZWVCH' --須要查看主外鍵關係的表 order by a.table_name
雖然truncate table在刪除數據的速度上會佔有必定的優點,但並非在全部的狀況咱們均可以使用truncate,存在如下狀況就使用truncate就會失敗。
1,要刪除數據的表包含foreign key約束(被其餘表引用),而delete則能夠經過級聯刪除來刪除相關聯的數據。
2,被索引視圖引用過的表,也不能使用truncate。oracle
有外鍵的表只能用delete,不能用truncate,這是語法規定,要麼就取消外鍵再truncate。
能夠先禁用外鍵約束,刪除完畢後,再啓動外鍵約束。spa
SELECT T1.TABLE_NAME, T2.TABLE_NAME AS "TABLE_NAME(R)", T1.CONSTRAINT_NAME, T1.R_CONSTRAINT_NAME AS "CONSTRAINT_NAME(R)", A1.COLUMN_NAME, A2.COLUMN_NAME AS "COLUMN_NAME(R)" FROM USER_CONSTRAINTS T1 INNER JOIN USER_CONSTRAINTS T2 ON T1.R_CONSTRAINT_NAME = T2.CONSTRAINT_NAME INNER JOIN USER_CONS_COLUMNS A1 ON T1.CONSTRAINT_NAME = A1.CONSTRAINT_NAME INNER JOIN USER_CONS_COLUMNS A2 ON T1.R_CONSTRAINT_NAME = A2.CONSTRAINT_NAME WHERE T2.TABLE_NAME = '要刪的表名';
--禁用約束: alter table XXX disable constraint XXX; --啓用約束 alter table XXX enable constraint XXX;