`

关于数据库的数据迁移

阅读更多
最近公司在为客户的即用升级开发,由2期升级为3期,说是说升级,其实也就是重新开发了,现在开发工作已经开发的差不多了,现在涉及到将2期的数据导入到3期中,现在将导数据的方法共享一下:

数据库:oracle
工具:PL/SQL
问题:数据迁移

详解:
     由于2个项目的数据库不相同,所以,考虑到字段等特殊问题,整体思路是通过利用oracle的游标特点来实现,将主要表的数据都写成游标,在通过移动游标的指针来查找别的数据,并添加到指定的表中,具体实现如下:
declare
  wizard_Id number;
  comName varchar(100);
  accCount number;
  endowCount number;
  socialId number;
  medCount number;
  fileCount number;
  accId number;
  Comid number;
  btId number;
  cout number;
  startYear number;
  startMonth number;
  entrustCount number;
  old aaa%rowtype;
  cursor comc is 
  select * from aaa;
  begin
  open comc;
  loop
        fetch comc into old;
        exit when comc%notfound;
        select general.nextval into wizard_Id from dual ;
        select company_id into Comid from employee_up_down_post where employee_up_down_id = old.b;
        --插入到任务通知单表
        insert into service_operate_wizard 
        (service_operate_wizard_id,EMPLOYEE_UP_DOWN_ID,employee_id,company_id,insert_date,df,is_basic_inf,is_basic_hi,IS_ENDOW,IS_FILE_READY,IS_MEDICAL,IS_UNEMP)
        values( wizard_Id,old.b,old.a,Comid,sysdate,0,1,0,0,0,0,0);
        --公积金
        select count(*) into accCount from employee_fee_period_item  efpi where efpi.employee_fee_period_id = old.e and efpi.product_id in (10026424332,1006313,6990);
        if accCount >0 then
        select general.nextval into btId from dual ;
        insert into business_task
        (business_task_id,employee_id,company_id,employee_up_down_id,business_type,df,status,is_need_operate,wizard_id) 
        values(btId,old.a,Comid,old.b,'11000',0,4,1,wizard_Id);
        update service_operate_wizard set is_basic_hi = 4,BASIC_HI_ID=btId where service_operate_wizard_id = wizard_Id;
        select count(*) into cout from e_business.acc_fund where employee_on_off_id  = old.b;
        if cout >0 then
        --说明有公积金
        select general.nextval into accId from dual;
         insert into EMPLOYEE_SI_SERVICE (EMPLOYEE_SI_SERVICE_ID,SERVICE_OPERATE_WIZARD_ID,BUSINESS_TASK_ID,
        SOCIAL_INSURANCE_ID,ACCOUNT_TYPE,OPERATE_TYPE,SOCIAL_NUMBER,ACCFUND_NUMBER,STATUS,ACCOUNT,SOCIAL_START_YEAR,SOCIAL_START_MONTH,
        CREATE_DATE,CREATE_MAN,MEMO,SERVICE_TYPE,DF,Product_Id,begindate,enddate,EMPLOYEE_FEE_PERIOD_ID) values 
        (accId,wizard_Id,btId,'','','','','',4,'','','',sysdate,1030,'数据导入','11000',0,'6990',to_date(old.c,'yyyy-mm-dd'),to_date(old.d,'yyyy-mm-dd'),old.e);
        end if;
        end if;
        --养老等四险
        select count(*) into endowCount from employee_fee_period_item  efpi where efpi.employee_fee_period_id = old.e and efpi.product_id in (10026423460,7009,9033622,18766302);
        if endowCount >0 then
        
        --用工
        select general.nextval into btId from dual ;
        insert into business_task
        (business_task_id,employee_id,company_id,employee_up_down_id,business_type,df,status,is_need_operate,wizard_id) 
        values(btId,old.a,Comid,old.b,'10000',0,4,1,wizard_Id);
        update service_operate_wizard set IS_HIREFIRE = -1,HIREFIRE_ID=btId where service_operate_wizard_id = wizard_Id;
        
        select general.nextval into btId from dual ;
        insert into business_task
        (business_task_id,employee_id,company_id,employee_up_down_id,business_type,df,status,is_need_operate,wizard_id) 
        values(btId,old.a,Comid,old.b,'10000',0,4,1,wizard_Id);
        update service_operate_wizard set IS_ENDOW = 4,ENDOW_ID=btId where service_operate_wizard_id = wizard_Id;
        --养老
        select count(*)into cout  from e_business.annuity_transaction  where employee_on_off_id =old.b 
        and annuity_unit_pay is not null;
        if cout >0 then
        select general.nextval into accId from dual;
        insert into EMPLOYEE_SI_SERVICE (EMPLOYEE_SI_SERVICE_ID,SERVICE_OPERATE_WIZARD_ID,BUSINESS_TASK_ID,
        SOCIAL_INSURANCE_ID,ACCOUNT_TYPE,OPERATE_TYPE,SOCIAL_NUMBER,ACCFUND_NUMBER,STATUS,ACCOUNT,SOCIAL_START_YEAR,SOCIAL_START_MONTH,
        CREATE_DATE,CREATE_MAN,MEMO,SERVICE_TYPE,DF,Product_Id,begindate,enddate,EMPLOYEE_FEE_PERIOD_ID) values 
        (accId,wizard_Id,btId,'','','','','',4,'','','',sysdate,1030,'数据导入','10000',0,'7009',to_date(old.c,'yyyy-mm-dd'),to_date(old.d,'yyyy-mm-dd'),old.e);
        end if;
        --失业
        select count(*)into cout  from e_business.annuity_transaction  where employee_on_off_id =old.b 
        and unemployment_unit_pay is not null;
        if cout >0 then
        select general.nextval into accId from dual;
        insert into EMPLOYEE_SI_SERVICE (EMPLOYEE_SI_SERVICE_ID,SERVICE_OPERATE_WIZARD_ID,BUSINESS_TASK_ID,
        SOCIAL_INSURANCE_ID,ACCOUNT_TYPE,OPERATE_TYPE,SOCIAL_NUMBER,ACCFUND_NUMBER,STATUS,ACCOUNT,SOCIAL_START_YEAR,SOCIAL_START_MONTH,
        CREATE_DATE,CREATE_MAN,MEMO,SERVICE_TYPE,DF,Product_Id,begindate,enddate,EMPLOYEE_FEE_PERIOD_ID) values 
        (accId,wizard_Id,btId,'','','','','',4,'','','',sysdate,1030,'数据导入','10000',0,'7008',to_date(old.c,'yyyy-mm-dd'),to_date(old.d,'yyyy-mm-dd'),old.e);
        end if;
        --工伤
        select count(*)into cout  from e_business.annuity_transaction  where employee_on_off_id =old.b 
        and occupational_unit_pay is not null;
        if cout >0 then
        select general.nextval into accId from dual;
        insert into EMPLOYEE_SI_SERVICE (EMPLOYEE_SI_SERVICE_ID,SERVICE_OPERATE_WIZARD_ID,BUSINESS_TASK_ID,
        SOCIAL_INSURANCE_ID,ACCOUNT_TYPE,OPERATE_TYPE,SOCIAL_NUMBER,ACCFUND_NUMBER,STATUS,ACCOUNT,SOCIAL_START_YEAR,SOCIAL_START_MONTH,
        CREATE_DATE,CREATE_MAN,MEMO,SERVICE_TYPE,DF,Product_Id,begindate,enddate,EMPLOYEE_FEE_PERIOD_ID) values 
        (accId,wizard_Id,btId,'','','','','',4,'','','',sysdate,1030,'数据导入','10000',0,'9033622',to_date(old.c,'yyyy-mm-dd'),to_date(old.d,'yyyy-mm-dd'),old.e);
        end if;
        --生育
        select count(*)into cout  from e_business.annuity_transaction  where employee_on_off_id =old.b 
        and birth_unit_pay is not null;
        if cout >0 then
        select general.nextval into accId from dual;
        insert into EMPLOYEE_SI_SERVICE (EMPLOYEE_SI_SERVICE_ID,SERVICE_OPERATE_WIZARD_ID,BUSINESS_TASK_ID,
        SOCIAL_INSURANCE_ID,ACCOUNT_TYPE,OPERATE_TYPE,SOCIAL_NUMBER,ACCFUND_NUMBER,STATUS,ACCOUNT,SOCIAL_START_YEAR,SOCIAL_START_MONTH,
        CREATE_DATE,CREATE_MAN,MEMO,SERVICE_TYPE,DF,Product_Id,begindate,enddate,EMPLOYEE_FEE_PERIOD_ID) values 
        (accId,wizard_Id,btId,'','','','','',4,'','','',sysdate,1030,'数据导入','10000',0,'18766302',to_date(old.c,'yyyy-mm-dd'),to_date(old.d,'yyyy-mm-dd'),old.e);
        end if;
        
        end if;
        --医疗保险
        select count(*) into medCount from employee_fee_period_item  efpi where efpi.employee_fee_period_id = old.e and efpi.product_id in (10026423453,10026423417,31844,31860,7010);
        if medCount >0 then
        select general.nextval into btId from dual ;
        insert into business_task
        (business_task_id,employee_id,company_id,employee_up_down_id,business_type,df,status,is_need_operate,wizard_id) 
        values(btId,old.a,Comid,old.b,'01100',0,4,1,wizard_Id);
        update service_operate_wizard set IS_MEDICAL =4,MEDICAL_ID=btId where service_operate_wizard_id = wizard_Id;
        select count(*)into cout  from e_business.annuity_transaction  where employee_on_off_id =old.b 
        and medical_unit_pay is not null;
        if cout >0 then
        select general.nextval into accId from dual;
        insert into EMPLOYEE_SI_SERVICE (EMPLOYEE_SI_SERVICE_ID,SERVICE_OPERATE_WIZARD_ID,BUSINESS_TASK_ID,
        SOCIAL_INSURANCE_ID,ACCOUNT_TYPE,OPERATE_TYPE,SOCIAL_NUMBER,ACCFUND_NUMBER,STATUS,ACCOUNT,SOCIAL_START_YEAR,SOCIAL_START_MONTH,
        CREATE_DATE,CREATE_MAN,MEMO,SERVICE_TYPE,DF,Product_Id,begindate,enddate,EMPLOYEE_FEE_PERIOD_ID) values 
        (accId,wizard_Id,btId,'','','','','',4,'','','',sysdate,1030,'数据导入','1100',0,'7010',to_date(old.c,'yyyy-mm-dd'),to_date(old.d,'yyyy-mm-dd'),old.e);
        end if;
        end if;
        --档案
        select count(*) into fileCount from employee_fee_period_item  efpi where efpi.employee_fee_period_id = old.e and efpi.product_id in (7014);
        if fileCount >0 then
        select general.nextval into btId from dual ;
        insert into business_task
        (business_task_id,employee_id,company_id,employee_up_down_id,business_type,df,status,is_need_operate,wizard_id) 
        values(btId,old.a,Comid,old.b,'01100',0,4,1,wizard_Id);
        update service_operate_wizard set IS_FILE_READY = 4,FILE_ID=btId where service_operate_wizard_id = wizard_Id ;
        
        
        end if;
   end loop;
end;





执行以上游标后,数据可以成功导入到新的数据库中,如果大家有什么更好的思路,可以共享一下哦 
分享到:
评论

相关推荐

    Oracle数据库数据迁移

    Oracle 数据库数据迁移 Oracle 数据库数据迁移是指将 Oracle 数据库中的数据从一个系统迁移到另一个系统的过程。这其中可能涉及到多种技术和工具,例如数据备份、数据恢复、数据同步等。 在 Oracle 数据库数据迁移...

    Oracle数据库数据迁移.pdf

    ### Oracle数据库数据迁移知识点 #### 1. 概述 - **文档目的**: 本文档主要介绍了Oracle数据库数据迁移的方法和流程,适用于减灾中心的数据迁移工作。 - **系统现状**: 减灾中心的系统分为主中心(位于百子湾机房)...

    数据库数据迁移程序

    将数据库1的表A迁移到数据库2的表B里面,自己配置数据库,和表的数据库信息和字段信息就可以了!很简单

    migration:瀚高数据库迁移工具,用于多种数据库类型(mysql、oracle等)迁移到瀚高数据库

    一、数据库迁移——MySQL举例 1、解压 migration-4.1.4-2023-11-23.zip 2、打开 migration 工具 3、点击帮助菜单,可查看使用说明文档,如下图所示 二、迁移步骤: 1、新建组,随便起名。 2、数据库连接,新建 源库 ...

    oracle项目--DataBase Migration(数据库迁移)PPT

    工具能够识别数据结构,转换数据类型,并将整个数据库结构和数据迁移到Oracle。此工具可能更适用于大型和复杂的数据库迁移项目,因为它能减轻手动转换的工作量。 在所有这些方案中,安全性和数据完整性都是至关重要...

    Apsara Clouder云计算技能认证:云数据库管理与数据迁移--试题.doc

    数据传输服务DTS提供了快速的数据迁移功能,可以将本地数据库或者RDS实例迁移到另一个RDS实例中,支持同异构数据源之间的数据迁移,同时提供了多种ETL特性,包括结构迁移、全量数据迁移、过滤数据迁移、增量数据迁移...

    Java实现数据库迁移同步

    8. **性能优化**:对于大规模数据迁移,可以考虑批量插入、多线程处理、分区策略等优化手段,提高迁移效率。 在项目`SynchroForDate`中,可能包含了实现这些步骤的具体Java代码。文件名暗示了可能关注的是日期相关...

    oracle向达梦数据库迁移

    在数据迁移完成后,需要重新创建在第三步中被临时删除的键、约束和索引,以恢复数据库的完整性和一致性。 七、表授权 迁移过程中必须考虑到权限和访问控制。在DM8中为新用户分配相应的对象权限,确保迁移后的功能与...

    达梦数据库连接管理&数据迁移工具

    达梦数据库可视化连接工具、DM管理工具、DTS数据迁移工具等。使用该工具可以连接管理达梦数据库、调试达梦增删查改等SQL语句、存储过程,迁移mysql、oracle、dm等数据库上的数据到达梦数据库里面。

    达梦数据库迁移工具.zip

    达梦数据库迁移工具是一款专为数据迁移而设计的软件,主要应用于数据库系统从其他平台向达梦数据库的平滑迁移。这款工具旨在帮助用户高效、安全地完成数据的转换、迁移和验证,确保业务系统的连续性和稳定性。在IT...

    数据库迁移 数据迁移 千万级 亿万级数据MySQL oracle关系型

    现需要开发一套程序用来快速迁移数据库,要求如下: 1.使用人员可以指定迁移数据库类型 如:(orcal,sqlServer,csv 迁移至mysql) 2.在迁移数据库时,可以只迁移指定字段. 3.开发多任务的平台,按权重去执行任务,如:...

    dm数据库迁移流程描述

    - 当迁移进度条显示为100%时,表示数据迁移已完成。 - 若迁移过程中出现任何错误提示,可通过查看“迁移报错日志”来定位问题原因,并采取相应措施进行修复。 #### 四、注意事项 - **数据校验**:迁移完成后,...

    oracle 数据库数据迁移解决方案

    去年年底做了不少系统的数据迁移,大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁移,有一些心得体会,与大家分享。  首先说说迁移流程,在迁移之前,写好方案,特别是实施的方案步骤一定...

    Oracle数据库数据迁移整理.pdf

    Oracle数据库数据迁移是一个复杂的过程,涉及多个步骤和组件,确保数据在迁移过程中的一致性、完整性和可用性。以下是对标题和描述中所提及的知识点的详细解释: 1. **概述**: - 迁移的目标是将一个Oracle数据库...

    Oracle数据库数据迁移概览.ppt

    Oracle 数据库数据迁移概览 Oracle 数据库数据迁移是一项复杂的任务,涉及到跨平台数据库传输、数据文件转换、数据库状态检查、外部对象标识等多个方面。本文将对 Oracle 数据库数据迁移的概览进行详细的介绍。 ...

    oracle数据库迁移实例01

    ### Oracle数据库迁移实例01:Windows环境下通过镜像文件实现db_name与instance_name不一致的迁移 #### 环境概述 本案例介绍了一个特定场景下的Oracle数据库迁移过程,涉及的环境包括: - **源数据库**:Oracle 9.2...

    postgreSQL数据迁移到达梦数据库操作

    PostgreSQL 数据迁移到达梦数据库操作 PostgreSQL 数据迁移到达梦数据库操作是指将 PostgreSQL 数据库中的数据迁移到达梦数据库中的过程。该过程需要使用 Navicat for PostgreSql 工具生成 SQL 脚本,然后使用达梦...

Global site tag (gtag.js) - Google Analytics