创建临时表:execute immediate 'sql';

通过临时表和关联查询解决循环处理效率低下,大数据操作移植时时间太长的问题。

结构相同的系统数据库表移植,案例如下:

create or replace procedure jk_trade_transfer authid current_user IS

create_sql     );
update_sql     );
insert_sql     );
V_info_id  NUMBER;
info_count NUMBER;
begin
  --一、迁移trade表
  --创建截止迁移之时起的交款交易的备份表
  create_sql:''';
  execute immediate create_sql ;

  --2、创建获取交款申请编号重复的交款交易数据表
  create_sql:''';
  execute immediate create_sql ;

  --3、生成新的申请编号并创建映射原申请编号的对应关系表
  --获取迁移数据的需要重新生成申请编号的数量
  ) ');
  --获取序列最大值
  ), ), ')INTO V_info_id from keytable where key_name = 'batchno';
  --创建主键映射表
  create_sql:='create table jk_trade_map as select batch_no ,ROWNUM +' ||V_info_id ||' as batch_no_new from jk_trade_1 order by batch_no';
  execute immediate create_sql ;
  --更新序列值
  update_sql:='update keytable set value = value +'|| info_count ||'where key_name='||'''batchno''';
  execute immediate update_sql ;
  --将不需要重新生成申请编号的数据插入映射表
  insert_sql:='insert into jk_trade_map select batch_no,batch_no batch_no_new from jk_trade jt where not exists(select jk.batch_no from jk_trade_1 jk where jk.batch_no=jt.batch_no)';
  execute immediate insert_sql ;

  --4、创建导入数据表
  create_sql:='create table jk_trade_copy as select itm.batch_no_new as batch_no, it.tran_type,it.tran_status, it.reg_operid, it.reg_opername,'||
   ' it.reg_date, it.reg_time, it.finish_date, it.finish_time, it.tran_amt,it.tran_area, it.tran_count, bi.info_id_new sect_id, it.crt_org_id, it.dist_id,'||
   ' it.req_notify_no, it.res_notify_no, it.tran_group,it.tran_mode,'||'''数据迁移'''||' otr_remark,it.id,itm.batch_no orgin_batch_no from info_trade it '||
   ' join jk_trade_map itm on it.batch_no=itm.batch_no left join base_info_map bi on bi.info_id=it.sect_id  order by it.batch_no';
  execute immediate create_sql ;

  --5、导入交款交易数据
  insert_sql:='insert into trade  select * from jk_trade_copy';
  execute immediate insert_sql ;

  COMMIT;
  ---迁移trade表 end

  --二、迁移pay_detail表
  --1、创建交款清册导入表
  create_sql:='create table pay_detail_copy as select t.batch_no_new batch_no,t.fund_new fund,bim.info_id_new info_id,p.info_area,p.dev_should,p.own_should,p.dev_amt,p.own_amt,p.tran_amt,'||'''数据迁移'''||' p.dec_remark from pay_detail p'||
              ' join jk_trade_map t on p.batch_no=t.batch_no'||
              ' left join base_info_map bim on bim.info_id=p.info_id'||
              ' left join acct t on t.fund=p.fund';
  execute immediate create_sql ;

  --2、导入交款清册数据
  insert_sql:='insert into pay_detail  select * from pay_detail_copy';
  execute immediate insert_sql ;   

  COMMIT;
  --三、迁移pay_sum表
  --1、创建获取交款组编号重复的交款交易数据表
  create_sql:='create table jk_trade_2 as select distinct t.batch_no,t.tran_mode from trade@jn t where exists (select td.batch_no from pay_sum td where td.batch_no=t.tran_group)';
  execute immediate create_sql ;

  --2、生成新的申请编号并创建映射原申请编号的对应关系表
  --获取迁移数据的需要重新生成申请编号的数量
  ) INTO info_count from (select distinct t.batch_no,t.tran_mode from trade@jn t where exists (select td.batch_no from pay_sum td where td.batch_no=t.tran_group));
  --获取序列最大值
  )), ), ')INTO V_info_id from keytable where key_name = 'batchno';
  --创建主键映射表
  create_sql:='create table pay_sum_map as select batch_no ,ROWNUM +' ||V_info_id ||' as batch_no_new from jk_trade_2 order by batch_no';
  execute immediate create_sql ;

  --将交易表中涉及tran_group重新生成的更新
  update_sql:''';
  execute immediate update_sql ;

  --更新序列值
  update_sql:='update keytable set value = value +'|| info_count ||'where key_name='||'''batchno''';
  execute immediate update_sql ;
  --将不需要重新生成申请编号的数据插入映射表
  insert_sql:='insert into pay_sum_map select batch_no,batch_no batch_no_new from pay_sum jt where not exists(select jk.batch_no from jk_trade_2 jk where jk.batch_no=jt.batch_no)';
  execute immediate insert_sql ;     

  --3、创建交款清册导入表
  create_sql:='create table pay_sum_copy as select t.batch_no_new batch_no,p.pay_type,'||'''数据迁移'''||' sum_remark from pay_sum p'||
              ' join pay_sum_map t on p.batch_no=t.batch_no';
  execute immediate create_sql ;

  --4、导入交款清册数据
  insert_sql:='insert into pay_sum  select * from pay_sum_copy';
  execute immediate insert_sql ;   

end jk_trade_transfer;

Oracle数据迁移-系统数据合并笔记的更多相关文章

  1. laravel中的数据迁移和数据填充

    laravel中的数据迁移和数据填充 标签(空格分隔): php 生成迁移文件两种方式: 1 新建一个表的迁移文件 php artisan make:migration create_students ...

  2. oracle 数据迁移之数据泵的基本使用

    oracle相同数据库下跨schema的表迁移—expdp/impdp 需求:将GUIDO用户下的表迁移到SCOTT用户下 select * from dba_role_privs where GRA ...

  3. oracle 定期迁移分区表数据(不落地)

    [oracle@SJ ~]$ cat /home/oracle/JY_SJ.sh #!/bin/bashsource /home/oracle/.bash_profileSDATE=$(date  + ...

  4. oracle在线迁移同步数据,数据库报错

    报需要升级的错误,具体处理步骤如下: 一.错误信息 SQL> alter database open ;alter database open resetlogs*ERROR at line 1 ...

  5. 阿里云Linux服务器,挂载硬盘并将系统盘数据迁移到数据盘

    因为之前用宝塔上线,宝塔只挂载了系统盘50G,打开阿里云云盘列表发现系统盘无法直接升级,故另买一块数据盘挂载到Linux服务器下,下面根据网上教程再结合我实际情况讲解一下实际操作,其实非常easy l ...

  6. laravel框架总结(十四) -- 数据迁移和数据填充

    一.数据迁移 1.创建一个迁移 1>使用artisan命令make:migration来创建一个新的迁移: php artisan make:migration create_sutdents_ ...

  7. 物化视图(materialized view) 实现数据迁移、数据定时同步

    近日公司有一个9i 的Oracle数据库,运行效率低下.想要将其升级到11G. 但是升级之前 要将数据进行同步,好在表不是很多.只有三张表.业务压力也不大,就想到了使用物 化视图的方式将数据同步过来. ...

  8. laravel模型建立和数据迁移和数据填充(数据填充没有成功)未完

    开始创建我们的第一个 Article 模型及其对应迁移文件了,我们在项目根目录运行如下 Artisan 命令一步到位: php artisan make:model Article -m -m 是 - ...

  9. 一种可以避免数据迁移的分库分表scale-out扩容方式

    原文地址:http://jm-blog.aliapp.com/?p=590 目前绝大多数应用采取的两种分库分表规则 mod方式 dayofweek系列日期方式(所有星期1的数据在一个库/表,或所有?月 ...

随机推荐

  1. 【翻译】光速React – Vixlet

    翻译原文链接:https://blog.vixlet.com/react-at-light-speed-78cd172a6411 个人翻译小站链接:http://www.zcfy.cc/article ...

  2. Ionic进行PC端Web开发时通过脚本压缩提高第一次加载效率

    1. 问题 1.1. 问题上下文描述: 基于Ionic进行PC端的Web应用开发: 使用Tomcat作为最终服务发布容器. 1.2. 问题描述: 编译后main.js的大小为4-6MByte.(集成第 ...

  3. AngularJs 第三节随笔

    利用$scope暴露模型数据 利用向控制器传递$scope对象的机制,可以把模型数据暴露给试图.在你的应用中可能还有其他数据,但是只有通过$scope 触及这些数据,angular才会把它当成数据模型 ...

  4. java设计模式之 装饰器模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构. 这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装 ...

  5. java中的流程控制语句总结

    程序的结构分类: 顺序结构:按照写代码的顺序 一次执行 选择结构:根据条件的不同有选择的执行不同的代码 循环结构:在一定条件下 反复执行某一片代码 选择结构: 也叫分支结构 根据条件的不同,有选择的执 ...

  6. 加载jquery插件注意了

    1.尽量放在</body>之前,不要放在</head>标签之前,如果执意要放也要放在css之后,例如: <link href="style.css" ...

  7. javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...

  8. form表单在前台转json对象

    会发生序列化乱码问题,待解决. //根据表单id将其内空间,名称,值转为json var fireTraceEquipment =queryParamByFormId('form1'); functi ...

  9. 信号处理——卷积(convolution)的实现

    作者:桂. 时间:2017-03-07  22:33:37 链接:http://www.cnblogs.com/xingshansi/p/6517301.html 前言 信号时域.频域对应关系,及其D ...

  10. [0] C# 扩展方法(Extension Method)

    有时有这样的情况,有一个类,你不能修改它,但你又想对它扩展(添加一个方法),这个时候就可以用到扩展方法了.请看下面的例子: using System;using System.Collections. ...