欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > 008-3.oracle避免约束带来的导入数据解决方案

008-3.oracle避免约束带来的导入数据解决方案

2024/12/1 9:01:12 来源:https://blog.csdn.net/weixin_50296259/article/details/141803432  浏览:    关键词:008-3.oracle避免约束带来的导入数据解决方案

无奋斗不青春

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈
优 质 教 程 推 荐:👉👉 Python爬虫从入门到入狱系列 合集👈👈

分隔线
在这里插入图片描述

oracle避免约束带来的导入数据解决方案

    • oracle避免约束带来的导入数据解决方案

oracle避免约束带来的导入数据解决方案

  • Oracle导入数据其 实很简单,但是如果数据存在约束:如主外键、主键约束、唯一约束,可能给数据导入带来很大的麻烦。
  • 比如主外键,如果批量导入数据,是难于指定导入的先后顺 序的,相信有不少入门级朋友们,会遇到跟我一样的问题。因此,为了节省大家的宝贵时间,特此分享自己的研究成果。
  • 个人解决方案为:在导入过程中,先导入表结构,再禁用约束,其次导入数据,最终启用约束即可。其核心就是禁用和启用约束过程的创建。
  • 具体步骤如下:
  • 第一步:导出(分为2步):导出结构、导出数据
    -- 只导出表结构
    exp 用户名/密码@服务器IP地址/数据库实例名 file=d:\struct.dmp log=d:\struct.log rows=n;
    
    -- 导出数据
    exp 用户名/密码@服务器IP地址/数据库实例名 file=d:\data.dmp log=d:\data.log ;
    
  • 第二步:导入结构
    - 导入表结构imp file=d:\struct.dmp log=d:\imp.log full=y;
    
  • 第三步:编写过程
    <!-- lang: sql -->
    CREATE OR REPLACE PROCEDURE MANAGE_USER_CONSTRAINTS
    (OPERATION VARCHAR2, FK  BOOLEAN DEFAULT TRUE, PK  BOOLEAN DEFAULT TRUE, UK  BOOLEAN DEFAULT TRUE ) 
    ISST VARCHAR2(255);-- R:外键约束CURSOR R IS SELECT TABLE_NAME, CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'R';-- P:主键约束CURSOR P IS SELECT TABLE_NAME, CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'P';-- U:唯一约束CURSOR U IS SELECT TABLE_NAME, CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'U';-- C:check约束;-- O:用于视图,只读约束;
    BEGINIF UPPER(OPERATION) IN ('DROP', 'DISABLE') THENIF FK THENBEGINFOR E IN R LOOPST := 'ALTER TABLE ' || E.TABLE_NAME || ' ' || OPERATION || 'CONSTRAINT ' || E.CONSTRAINT_NAME;EXECUTE IMMEDIATE (ST);DBMS_OUTPUT.PUT_LINE(ST);END LOOP;END;END IF;IF PK THENBEGINFOR E IN R LOOPST := 'ALTER TABLE ' || E.TABLE_NAME || ' ' || OPERATION || 'CONSTRAINT ' || E.CONSTRAINT_NAME;EXECUTE IMMEDIATE (ST);DBMS_OUTPUT.PUT_LINE(ST);END LOOP;END;BEGINFOR E IN P LOOPST := 'ALTER TABLE ' || E.TABLE_NAME || ' ' || OPERATION || 'CONSTRAINT ' || E.CONSTRAINT_NAME;EXECUTE IMMEDIATE (ST);DBMS_OUTPUT.PUT_LINE(ST);END LOOP;END;END IF;IF UK THENBEGINFOR E IN U LOOPST := 'ALTER TABLE ' || E.TABLE_NAME || ' ' || OPERATION || 'CONSTRAINT ' || E.CONSTRAINT_NAME;EXECUTE IMMEDIATE (ST);DBMS_OUTPUT.PUT_LINE(ST);END LOOP;END;END IF;ELSIF UPPER(OPERATION) IN ('ENABLE') THENIF PK THENBEGINFOR E IN P LOOPST := 'ALTER TABLE ' || E.TABLE_NAME || ' ' || OPERATION || 'CONSTRAINT ' || E.CONSTRAINT_NAME;EXECUTE IMMEDIATE (ST);DBMS_OUTPUT.PUT_LINE(ST);END LOOP;END;END IF;IF FK THENBEGINFOR E IN P LOOPST := 'ALTER TABLE ' || E.TABLE_NAME || ' ' || OPERATION || 'CONSTRAINT ' || E.CONSTRAINT_NAME;EXECUTE IMMEDIATE (ST);DBMS_OUTPUT.PUT_LINE(ST);END LOOP;END;BEGINFOR E IN R LOOPST := 'ALTER TABLE ' || E.TABLE_NAME || ' ' || OPERATION || 'CONSTRAINT ' || E.CONSTRAINT_NAME;EXECUTE IMMEDIATE (ST);DBMS_OUTPUT.PUT_LINE(ST);END LOOP;END;END IF;IF UK THENBEGINFOR E IN U LOOPST := 'ALTER TABLE ' || E.TABLE_NAME || ' ' || OPERATION || 'CONSTRAINT ' || E.CONSTRAINT_NAME;EXECUTE IMMEDIATE (ST);DBMS_OUTPUT.PUT_LINE(ST);END LOOP;END;END IF;ELSEDBMS_OUTPUT.PUT_LINE('THE FIRST PARAMETER OF THE PROCEDURE MUST BEDROP OR ENABLE OR DISABLE');END IF;
    END;
    /
    
  • 第四步:调用过程,禁用约束检查
    exec MANAGE_USER_CONSTRAINTS(disable,true,true,true);
    
  • 第五步:导入数据
    imp file=d:\data.dmp log=d:\data.log ignore=y full=y;
    
  • 第六步:启用约束
    exec MANAGE_USER_CONSTRAINTS(enable,true,true,true);
    
  • 第七步:删除过程
    drop procedure MANAGE_USER_CONSTRAINTS;
    

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com