ITPub博客

首页 > 数据库 > Oracle > 生成脚本,得到所有表的外键约束,然后删除并重建这些约束

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

原创 Oracle 作者:zhang41082 时间:2019-04-02 22:21:04 0 删除 编辑

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

[@more@]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;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25016/viewspace-907437/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2002-10-11

  • 博文量
    105
  • 访问量
    122260