生成脚本,得到所有表的外键约束,然后删除并重建这些约束

上一篇 / 下一篇  2007-03-29 00:00:00 / 个人分类:开发

仅做记录,可以得到所有的外键约束,生成创建和删除这些约束的脚本,在数据库管理中有点用处


CREATE OR REPLACE PROCEDURE GENERATE_FK IS
CURSOR 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;

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-11  
   1234
567891011
12131415161718
19202122232425
262728293031 

我的存档

数据统计

  • 访问量: 1600
  • 日志数: 250
  • 建立时间: 2008-01-01
  • 更新时间: 2008-01-01

RSS订阅

Open Toolbar