关于数据库的数据迁移

最近公司在为客户的即用升级开发,由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;





执行以上游标后,数据可以成功导入到新的数据库中,如果大家有什么更好的思路,可以共享一下哦
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值