生成指令碼,得到所有表的外來鍵約束,然後刪除並重建這些約束
僅做記錄,可以得到所有的外來鍵約束,生成建立和刪除這些約束的指令碼,在資料庫管理中有點用處
[@more@]CREATE OR REPLACE PROCEDURE GENERATE_FK ISCURSOR C IS
SELECT TABLE_NAME
FROM USER_CONSTRAINTS
WHERE CONSTRAINT_NAME IN
(SELECT DISTINCT R_CONSTRAINT_NAME
FROM USER_CONSTRAINTS
WHERE R_CONSTRAINT_NAME IS NOT NULL)
ORDER BY TABLE_NAME;
BEGIN
FOR R IN C LOOP
DBMS_OUTPUT.PUT_LINE('table_name : ' || R.TABLE_NAME);
DBMS_OUTPUT.PUT_LINE('drop script : ');
FOR R1 IN (SELECT 'alter table ' || TABLE_NAME || ' drop constraint ' ||
CONSTRAINT_NAME || ';' AS FK_SQL
FROM USER_CONSTRAINTS
WHERE R_CONSTRAINT_NAME IN
(SELECT CONSTRAINT_NAME
FROM USER_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'P'
AND TABLE_NAME = R.TABLE_NAME)) LOOP
DBMS_OUTPUT.PUT_LINE(R1.FK_SQL);
END LOOP;
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('create script : ');
FOR R2 IN (SELECT 'alter table ' || C.TABLE_NAME || ' add constraint ' ||
C.CONSTRAINT_NAME || ' foreign key (' || A.COLUMN_NAME ||
') REFERENCES ' || B.TABLE_NAME || '(' ||
D.COLUMN_NAME || ');' AS FK_SQL
FROM USER_CONS_COLUMNS A,
USER_CONSTRAINTS B,
USER_CONSTRAINTS C,
USER_CONS_COLUMNS D
WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND B.CONSTRAINT_NAME = C.R_CONSTRAINT_NAME
AND C.CONSTRAINT_NAME = D.CONSTRAINT_NAME
AND B.TABLE_NAME = R.TABLE_NAME) LOOP
DBMS_OUTPUT.PUT_LINE(R2.FK_SQL);
END LOOP;
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('');
END LOOP;
END GENERATE_FK;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25016/viewspace-907437/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql 刪除老是報外來鍵約束MySql
- Oracle定義約束 外來鍵約束Oracle
- 資料完整性約束:主鍵、外來鍵、各種約束的建立刪除語句
- 解決無法刪除表,提示被外來鍵約束引用
- 批量刪除MSSQL 中主外來鍵約束SQL
- Mysql-基本練習(06-唯一約束、外來鍵約束、新增、刪除單列)MySql
- 解決資料庫的索引亂碼問題,先刪除外來鍵約束,再刪除主鍵約束及其索引資料庫索引
- SQL的主鍵和外來鍵約束SQL
- oracle外來鍵約束的總結Oracle
- mysql中外來鍵約束級聯更新與刪除MySql
- 新增/刪除約束(Oracle)Oracle
- 【Foreign Key】Oracle外來鍵約束三種刪除行為Oracle
- 教你mysql如何增加外來鍵約束MySql
- MySQL禁用恢復外來鍵約束MySql
- 遷移後處理外來鍵約束的問題
- 關於外來鍵約束和對應主鍵資訊的查詢指令碼指令碼
- 【PK】Oracle 10g刪除主鍵約束後無法刪除唯一約束索引問題的模擬與分析Oracle 10g索引
- SQL外來鍵約束的含義及建立SQL
- Oracle外來鍵約束中NULL的處理OracleNull
- Sqlserver中所有約束的型別,建立、修改與刪除SQLServer型別
- 刪除或清空具有外來鍵約束的表資料包-ERROR 1701 (42000)Error
- Sql server 檢視錶引用、依賴項,刪除表及約束 指令碼SQLServer指令碼
- AppBoxFuture(七): 分散式外來鍵約束APP分散式
- mysql不能新增外來鍵約束怎麼辦MySql
- mysql啟動和關閉外來鍵約束MySql
- 詳解外來鍵約束(foreign key)
- 利用虛擬列實現虛擬刪除的主外來鍵約束
- SQL SERVER中找出拙劣的約束,索引,外來鍵SQLServer索引
- sql server中預設約束的通用sql指令碼的刪除方法SQLServer指令碼
- (轉)oracle資料庫中所有外來鍵約束失效SQL語句Oracle資料庫SQL
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- 啟用約束時使用exceptions表來跟蹤不符合約束的資料並修正Exception
- PostgreSQL11preview-支援陣列外來鍵約束SQLView陣列
- 外來鍵約束drop table cascade constraintsAI
- 查詢(看)表的主鍵、外來鍵、唯一性約束和索引索引
- oracle鍵約束控制Oracle
- [求助][資料庫]表間約束的刪除完整性?資料庫
- ORACLE: 查詢(看)表的主鍵、外來鍵、唯一性約束和索引Oracle索引