`
JYLike97
  • 浏览: 23140 次
  • 性别: Icon_minigender_1
  • 来自: 四川
文章分类
社区版块
存档分类
最新评论

实现一个删除表约束为Load数据做准备的处理流程

阅读更多
--1创建临时存储元数据的表
CREATE OR REPLACE PROCEDURE create_temp_table
AS
    v_crtable varchar2(32767):=Q'[CREATE TABLE temp_meta (metadata VARCHAR2(4000))]';
BEGIN
    EXECUTE IMMEDIATE v_crtable; 
END create_temp_table;

--2存储过程实现删除用户表约束为Load数据作准备
CREATE OR REPLACE PROCEDURE drop_user_constraints(p_table_name varchar2)
AS
    v_object_name varchar2(50);
    v_object_type varchar2(50); 
    v_drop_stmt varchar2(32767);
    v_alter_stmt varchar2(32767):=Q'[ALTER TABLE ]';
    TYPE cur IS REF CURSOR;
    meta_cur cur; 
BEGIN
    --通过忽略创建脚本的存储参数来减少元数据长度
    DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
    --获取所创建的约束元数据
    OPEN meta_cur FOR SELECT uc.constraint_type,uc.constraint_name 
                        FROM user_constraints uc
                       WHERE uc.table_name = UPPER(p_table_name)
                         AND uc.constraint_type <> 'C';
    LOOP
    FETCH meta_cur INTO v_object_type,v_object_name;
    EXIT WHEN meta_cur%NOTFOUND;
        v_alter_stmt := v_alter_stmt||p_table_name
                                    ||Q'[ DISABLE CONSTRAINT ]'
                                    ||v_object_name;
        EXECUTE IMMEDIATE v_alter_stmt;
        v_alter_stmt := Q'[ALTER TABLE ]';                           
    END LOOP;
    --获取所创建的索引的元数据 
    OPEN meta_cur FOR SELECT ui.index_type,ui.index_name 
                        FROM user_indexes ui
                       WHERE ui.table_name = UPPER(p_table_name);
    LOOP
    FETCH meta_cur INTO v_object_type,v_object_name;
    EXIT WHEN meta_cur%NOTFOUND;                   
        --将元数据插入到临时表中保存
        INSERT INTO temp_meta 
            SELECT to_char(dbms_metadata.get_ddl('INDEX',v_object_name)) FROM dual;
        --动态SQL删除原表上的索引
        v_drop_stmt := Q'[DROP INDEX ]'||v_object_name;
        EXECUTE IMMEDIATE v_drop_stmt;              
    END LOOP;
END drop_user_constraints;


--3创建存储过程回复原表约束
CREATE OR REPLACE PROCEDURE recovery_user_constrains(p_table_name varchar2)
AS
    v_create_sql varchar2(32767);
    v_object_name varchar2(50);
    v_alter_sql varchar2(32767);
    TYPE cur IS REF CURSOR;
    con_cur cur;
BEGIN
    --重创建的索引
    OPEN con_cur FOR SELECT tm.metadata FROM temp_meta tm;
    LOOP
    FETCH con_cur INTO v_create_sql;
    EXIT WHEN con_cur%NOTFOUND; 
        EXECUTE IMMEDIATE v_create_sql;
    END LOOP;
    --启用所有约束
    OPEN con_cur FOR SELECT uc.constraint_name FROM user_constraints uc
                      WHERE uc.table_name = UPPER(p_table_name)
                        AND uc.status = 'DISABLED';
    LOOP
        FETCH con_cur INTO v_object_name;
        EXIT WHEN con_cur%NOTFOUND;
        v_alter_sql := Q'[ALTER TABLE ]' || p_table_name
                                         || Q'[ ENABLE CONSTRAINT ]'
                                         || v_object_name;
        EXECUTE IMMEDIATE v_alter_sql;               
    END LOOP;                    
END recovery_user_constrains;

 

0
0
分享到:
评论

相关推荐

    从事务性数据到数据仓库数据的抽取方式

    总之,从事务性数据到数据仓库的数据抽取是一个涉及多个层面的过程,包括数据分类、抽取策略、数据库设计约束以及ETL流程优化。理解这些知识点有助于构建高效、准确的数据仓库系统,为业务分析和决策提供强有力的...

    MySQL删除重复记录

    本文将深入探讨MySQL中删除重复记录的方法,以及如何利用其特性来优化数据管理流程。 ### MySQL删除重复记录 在MySQL中,重复记录可能由于各种原因而出现,比如数据导入错误、系统故障或人为操作失误等。这些重复...

    ETL 解决方案介绍

    1. **数据源分析**:理解源数据的结构和特性,为后续步骤做准备。 2. **概要设计和详细设计**:规划ETL流程,包括抽取、转换和装载的具体步骤。 3. **测试**:验证ETL流程的正确性和性能,确保数据的准确无误。 **...

    excel信息导入到MySql

    2. 创建MySQL表:在MySQL中创建一个与Excel表格结构相匹配的表。定义好字段名、数据类型(如INT、VARCHAR、DATE等)和约束(如主键、外键等)。如果Excel中的数据已经按照数据库规范组织,这一步可以省略。 3. 导出...

    mysql面试题 数据库操作 数据查询 数据库安全性和完整性 数据库编程

    - 视图:虚拟表,基于一个或多个表的查询结果,提供了一种简化查询和数据抽象的方式。 - 事务:确保数据一致性的重要机制,包括ACID(原子性、一致性、隔离性、持久性)属性。 了解并熟练掌握这些知识点,将有助...

    kimball DQ paper

    8. 持续的数据质量管理:数据质量不仅仅是单次的清洗任务,它要求有一个持续的数据质量管理流程。这个流程可能包括定期的审核、监控数据质量指标以及持续改进数据处理过程。 总之,本文档中提及的“kimball DQ ...

    数据库系统开发考试题目.doc

    实体完整性是指每个表都有一个主键,确保数据的唯一性;参照完整性规定了表间关联,通过外键约束防止非法数据插入;用户自定义完整性则是根据业务需求设定的特定规则。 2. 字段定义:字段的属性包括数据类型(如...

    开源ETL工具kettle系列之增量更新设计技巧

    假设存在一个源数据库表`customers`,包含`id`、`firstname`、`lastname`、`age`字段,以及一个默认值为系统当前时间的时间戳字段`updatedate`。转换后的表结构类似:`id`、`firstname`、`lastname`、`age`、`...

    SQL-Server-Sample-Database.zip

    5. 最后,运行"drop all objects.sql"以清除数据库,为新的实验或学习阶段做准备。 通过这样的实战练习,你可以深入理解SQL Server的工作原理,熟悉数据库设计原则,为今后在真实环境中处理复杂数据问题打下坚实...

    web小网站,包含修改、添加、删除、查询功能。

    5. **数据库设计**:包括表结构的设计、关系的建立以及数据完整性约束,这些都直接影响到CRUD操作的实现。 6. **用户验证和授权**:为了确保只有授权用户能进行修改、添加、删除操作,网站通常会包含身份验证和授权...

    基于asp.net的图书管理系统报告.doc

    每个数据表的设计应包含主键和外键约束,以确保数据的关联性和完整性。 综上所述,基于ASP.NET的图书管理系统是一个综合运用了Web开发技术、数据库设计和管理、身份验证和权限控制等多个领域的项目。开发者需要掌握...

    近几年自考管理系统中计算机应用选择题汇总.pdf

    2. 数据结构与数据模型:数据结构、数据操作和数据完整性约束构成了逻辑模型,它是数据库设计中的一个重要组成部分。 3. Visual FoxPro 程序编写:在该编程环境中,如果一行语句太长需要换行,可以继续输入,无需敲...

    DB2使用经验积累

    - **update不能用一个表中的记录为条件修改另一个表中的记录**:在DB2中,直接基于一个表的数据修改另一个表的操作受到限制。 - **如果显示调用存储过程时传null值要注意**:在调用存储过程时,如果参数为`NULL`,则...

    2021-2022计算机二级等级考试试题及答案No.16046.docx

    - 在数据库中,表是实际存储数据的地方,而视图则是一个虚拟表,它根据某个SQL查询的结果动态生成。视图本身并不存储数据,只是作为一个查询的抽象表示。虽然可以在视图上创建索引,但这通常受到一定的限制,因为...

    MySQL 5.7 入门教程

    自增主键(AUTO_INCREMENT)是一个特殊类型的列,它的值自动递增,常用于标识表中的唯一记录。 自定义变量在复杂的查询中很有用,可以保存中间结果或控制流程。例如,用户可以声明和初始化变量,然后在查询中多次...

    2021-2022计算机二级等级考试试题及答案No.12727.docx

    - **接口与实现**: Java中虽然限制了一个类只能继承一个父类,但一个类可以实现多个接口。接口是一种完全抽象的类,只包含常量和抽象方法。 - **接口继承**: 接口之间支持多重继承,即一个接口可以继承多个其他接口...

    SQL Server 2005数据库简明教程 电子教案

    Integration Services(SSIS)是一个ETL(Extract, Transform, Load)工具,用于数据迁移、清洗和转换,支持复杂的业务逻辑和数据处理流程。 九、性能优化 SQL Server 2005提供了性能监控和优化工具,如查询分析器...

    DB2 V8数据库基础 V1.0.20060426.doc

    - **3.3.10 取得一个表的行数**:通常使用COUNT(*)函数来统计表中的行数。 **3.4 DCL—数据控制语言** - **3.4.1 GRANT**:授予用户权限。 - **3.4.2 REVOKE**:收回用户权限。 - **3.4.3 COMMIT**:提交事务。 - *...

Global site tag (gtag.js) - Google Analytics