生成指令碼,得到所有表的外來鍵約束,然後刪除並重建這些約束
僅做記錄,可以得到所有的外來鍵約束,生成建立和刪除這些約束的指令碼,在資料庫管理中有點用處
[@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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Javaweb-約束-外來鍵約束JavaWeb
- 外來鍵約束
- 批量刪除MSSQL 中主外來鍵約束SQL
- Mysql-基本練習(06-唯一約束、外來鍵約束、新增、刪除單列)MySql
- 約束外來鍵筆記筆記
- 關於外來鍵約束
- oracle外來鍵約束的總結Oracle
- 教你mysql如何增加外來鍵約束MySql
- AppBoxFuture(七): 分散式外來鍵約束APP分散式
- Sqlserver中所有約束的型別,建立、修改與刪除SQLServer型別
- Sql server 檢視錶引用、依賴項,刪除表及約束 指令碼SQLServer指令碼
- SQL外來鍵約束的含義及建立SQL
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- mysql不能新增外來鍵約束怎麼辦MySql
- 主鍵約束、唯一約束和唯一索引索引
- mysql~資料完整性考慮~外來鍵約束MySql
- [20180423]關於閃回表與主外來鍵約束.txt
- 聊聊Oracle外來鍵約束(Foreign Key)的幾個操作選項Oracle
- 約束
- MariaDB資料庫的外來鍵約束例項程式碼介紹詳解資料庫
- 表的完整性約束
- 資料遷移無法新增外來鍵約束,錯誤程式碼 1215
- MySQL 約束MySql
- 03約束
- SQL約束SQL
- 約束CONSTRAINTAI
- 差分約束的一些理解
- MySQL——表的約束,資料型別,增刪查改MySql資料型別
- SQL Server 資料表程式碼建立約束SQLServer
- (10)邏輯綜合新增約束(環境約束)
- 5_MySQL 表的欄位約束MySql
- 差分約束
- 約束介紹
- 綜合約束
- SQLite語句(一):表的操作和約束SQLite
- 泛型的約束理解泛型
- 請求結束後刪除檔案
- Javaweb-約束案例JavaWeb