要找到導致外鍵約束沖突的子表(即包含"child record"的表),可以通過以下SQL查詢在Oracle數據庫中定位:
1. 查詢約束基本信息(確定父表和子表)
SELECT owner, constraint_name, table_name AS child_table,r_owner, r_constraint_name
FROM all_constraints
WHERE constraint_name = 'UPLD_DETL_KEY';
2. 查詢完整的外鍵關系(推薦)
SELECT a.table_name AS child_table,a.column_name AS child_column,c_pk.table_name AS parent_table,c_pk.column_name AS parent_column
FROM all_cons_columns a
JOIN all_constraints c ON a.constraint_name = c.constraint_name
JOIN all_constraints c_pk ON c.r_constraint_name = c_pk.constraint_name
WHERE c.constraint_name = 'UPLD_DETL_KEY';
3. 查詢外鍵列詳細信息
SELECT table_name AS child_table,column_name AS foreign_key_column
FROM all_cons_columns
WHERE constraint_name = 'UPLD_DETL_KEY';
4. 使用DBA視圖(需要DBA權限)
SELECT table_name AS child_table,column_name AS foreign_key_column
FROM dba_cons_columns
WHERE constraint_name = 'UPLD_DETL_KEY';
查詢結果解釋:
?child_table?:子表名稱(包含沖突數據的表)
?child_column?:子表中的外鍵列
?parent_table?:父表名稱(你嘗試修改/刪除的表)
?parent_column?:父表中被引用的主鍵/唯一鍵列
額外提示:
如果查詢無結果,嘗試:
SELECT * FROM all_constraints WHERE constraint_name LIKE '%UPLD_DETL_KEY%';
查找所有依賴關系:
SELECT * FROM all_dependencies WHERE referenced_name = '父表名';
在SQL開發工具中(如SQL Developer):
右鍵點擊父表 → 選擇"約束條件"
查找名為
UPLD_DETL_KEY
的外鍵約束查看"引用表"即為子表
找到子表后,檢查其中的關聯數據:
SELECT * FROM 子表名稱
WHERE 外鍵列 = 要刪除的父表記錄ID;
通過以上方法,您就能準確定位到導致 ORA-02292
錯誤的子表及其關聯數據。