天天看点

ORACE 数据迁移 数据清洗 简单得统计配置

编写得目的:

1 在数据迁移中,日常数据清洗是一个很频繁得工作。如果每次通过sql分步执行会非常麻烦及耗时。
        所以通过自动统计执行的方式处理减少不必要的重复并且简单的工作量
   2 在大量的任务及着急催促下 减少出错的概率
   3 所以统计信息同步数据库存储 从而 信息共享 方便工作使用 如 在家远程 等等的,同事协助处理,会简单并且
     方便很多
           

第一 我们创建一张RS_STATISTICS表 存储我们的统计信息及统计脚本

第二 根据我们的RS_STATISTICS 的内容 通过存储过程去 执行我们要统计的脚本

在这里只需要使用到 动态执行 即可
           

/*

create table RS_STATISTICS

(

rs_id VARCHAR2(50),

rs_type VARCHAR2(50),

rs_name VARCHAR2(50),

rs_content VARCHAR2(4000),

rs_table VARCHAR2(50),

rs_num NUMBER,

op_tm DATE default sysdate not null,

rs_sts NUMBER default 0 not null,

ct DATE,

ut DATE,

memo VARCHAR2(3000),

rs_exception VARCHAR2(3000)

)

tablespace SYNCSH_DAT

pctfree 10

initrans 1

maxtrans 255

storage

(

initial 64K
next 1M
minextents 1
maxextents unlimited           

);

-- Add comments to the columns

comment on column RS_STATISTICS.rs_id

is 'ID';

comment on column RS_STATISTICS.rs_type

is '类型';

comment on column RS_STATISTICS.rs_name

is '名称';

comment on column RS_STATISTICS.rs_content

is '内容';

comment on column RS_STATISTICS.rs_table

is '表';

comment on column RS_STATISTICS.rs_num

is '数量';

comment on column RS_STATISTICS.op_tm

is '录入时间';

comment on column RS_STATISTICS.ct

is '开始时间';

comment on column RS_STATISTICS.ut

is '更新时间';

comment on column RS_STATISTICS.memo

is '备注';

comment on column RS_STATISTICS.rs_sts

is '状态 0 待执行,1 执行中,2 执行成功,4 异常';

*/

create or replace package p_rs_statistics is

--// 程序启动

procedure p_start;

--// 初始化 数据存储表

procedure p_Complement;

--// 程序处理

procedure perform(p_id varchar2);

--// 清空落地表数据

procedure truncate_str(rs_table varchar2);

--// drop 表

procedure drop_str(rs_table varchar2);

end p_rs_statistics;

/

create or replace package body p_rs_statistics is

procedure p_start is

begin

for x in (select d.rs_id from syncsh.rs_statistics d where d.rs_sts = 0) loop
  update syncsh.rs_statistics d
     set d.rs_sts = 1, d.rs_exception = null, d.rs_num = 0,ct=sysdate
   where d.rs_id = x.rs_id;
  commit;
  perform(x.rs_id);
end loop;           

exception

when others then
  rollback;           

end;

procedure p_Complement is

v_rs_statistics syncsh.rs_statistics%rowtype;           

begin

update syncsh.rs_statistics d
   set d.rs_table = 'syncsh.rs_statistics_' || d.rs_id
 where 1 = 1;
commit;           

procedure perform(p_id varchar2) is

v_rs_statistics syncsh.rs_statistics%rowtype;
exec_str        varchar2(4000);
p_sqlerrm       varchar2(4000);           
select *
  into v_rs_statistics
  from syncsh.rs_statistics d
 where d.rs_id = p_id;
---> 清空表
p_rs_statistics.truncate_str(v_rs_statistics.rs_table);
---> 删除表
p_rs_statistics.drop_str(v_rs_statistics.rs_table);
---> 创建 录入数据
exec_str := 'create table ' || v_rs_statistics.rs_table || ' as ' ||
            v_rs_statistics.rs_content;
execute immediate exec_str;
v_rs_statistics.rs_num := sql%rowcount;
dbms_output.put_line('rs_num :' || v_rs_statistics.rs_num);
--> 更新状态
update syncsh.rs_statistics d
   set d.rs_num = v_rs_statistics.rs_num, d.rs_sts = 2, d.ut = sysdate
 where d.rs_id = p_id;
commit;           
when others then
  p_sqlerrm := substr(sqlerrm, 1, 500);
  dbms_output.put_line('exec_str : ' || exec_str);
  dbms_output.put_line('ID :' || p_id || ' 异常 : ' || p_sqlerrm);
  --> 记录异常
  update syncsh.rs_statistics d
     set d.rs_exception = p_sqlerrm, d.rs_sts = 4, d.ut = sysdate
   where d.rs_id = p_id;
  commit;           

procedure truncate_str(rs_table varchar2) is

truncate_str varchar2(4000);
p_sqlerrm    varchar2(4000);           
truncate_str := 'truncate table  ' || rs_table;
execute immediate truncate_str;           
when others then
  p_sqlerrm := substr(sqlerrm, 1, 500);
  dbms_output.put_line('truncate rs_table :' || rs_table || ' 异常 : ' ||
                       p_sqlerrm);           

procedure drop_str(rs_table varchar2) is

drop_str  varchar2(4000);
p_sqlerrm varchar2(4000);           
drop_str := 'drop table  ' || rs_table;
execute immediate drop_str;
commit;           
when others then
  p_sqlerrm := substr(sqlerrm, 1, 500);
  dbms_output.put_line('drop rs_table :' || rs_table || ' 异常 : ' ||
                       p_sqlerrm);           

软件程序 脚本是为了提供方便而产生。愿可以减少不必要的时间浪费。

如 小伙伴提供一份 程序 导出execl 的最好了 感谢!

*/