--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;
分享到:
相关推荐
使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...
在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...
在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...
在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...
在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...
在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用...
在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用...
在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...
在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...
在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. ...