在大量数据迁移期间oracle学习笔记

在数据迁移期间oracle学习笔记


0主键(自增) 1用户代码 2区域代码 3承保公司代码 4理赔编码 5投保确认码 6案件状态 7案件进展 8重开案件进展 9转换后案件状态


需求分析:
1、根据上述要求创建需要的表
2、将几个表中的相应数据对应插入到新创建的表中
3、因为claim_id是固定的,可以根据claim_id进行循环插入几个表中的数据
4、在7、8项中涉及到案件状态的去重和拼接
5、案件状态的转换


--创建表T_CLAIM_NEW
create table T_CLAIM_NEW(
    ID NUMBER,                  --主键ID
    ClaimId number(10),
    UserCode varchar2(30),      --用户名称
    AreaCode varchar2(10),      --地区代码
    CompanyCode varchar2(8),    --公司代码
    ClaimQueryNo varchar2(50),  --理赔编码
    PolicyConfirmNo varchar2(50), --投保确认码
    CLAIM_STATUS varchar2(2),       --案件状态
    G_CLAIM_STATUS varchar2(30),        --案件进展
    REOPEN_CLAIM_STATUS varchar2(30), --重开后的案件进展
    IA_CLAIM_STATUS varchar2(30),       --转换后的案件状态
    CONSTRAINT PK_ID PRIMARY KEY (ID)
);

--自增序列
CREATE SEQUENCE T_CLAIM_NEW_ID1
    INCREMENT BY 1      --每次+1
    START WITH 1            --从1开始
    NOMAXVALUE              --不设置最大值
    NOCYCLE                     
    NOCACHE;

--创建触发器
CREATE OR REPLACE TRIGGER TRI_T_CLAIM_NEW_ID1
    BEFORE INSERT 
    ON T_CLAIM_NEW
    FOR EACH ROW 
    begin
    select T_CLAIM_NEW_ID1.nextval INTO :NEW.ID from dual; 
end;
/

************************************************************************************************************************************************

--去重:                                                                                                                                                 
--创建临时表                                                                                                                                             
create table ma_20180709 as (select * from T_CLAIM_LIST_RECORD);                                                                                    
--删除重复数据并保留最大时间(因为最后一次更新时间也是id越大时间越大)                                                                                                                                    
delete from  ma_20180709 where RECORD_ID not in (select max(RECORD_ID) from ma_20180709 group by claim_id,claim_code);
************************************************************************************************************************************************                                                                                                         
--查询表ma_20180709中相应数据并拼接claim_status字段                                                                                                              
--insert into tablename                                                                                                                             
select  listagg(claim_status,',') within group(order by CLAIM_STATUS) from ma_20180709 group by claim_id,claim_code;    



************************************************************************************************************************************************
--对轨迹表进行去重等操作
--创建ma_01临时表
create table ma_01 as (select * from T_CLAIM_LIST_RECORD);
--去重
delete from ma_01 where RECORD_ID not in (select max(RECORD_ID) from ma_01 group by claim_id,claim_code);

--对重开轨迹表进行去重等操作
--创建ma_03临时表
create table ma_03 as (select * from T_CLAIM_LIST_RECORD_REOPEN);
--去重
delete from ma_03 where RECORD_ID not in (select max(RECORD_ID) from ma_03 group by claim_id,claim_code);


--创建主表T_CLAIM_LIST的临时表ma_02
create table ma_02 as (select * from T_CLAIM_LIST);
************************************************************************************************************************************************

--函数入口
declare

--声明投保确认码
CONFIRM_SEQUENCE varchar(50);
--声明案件状态
claim_status_bj varchar2(30);
--声明案件进展(拼接后案件状态)
claim_status_pj varchar2(30);
--声明重开后案件状态
claim_status_ck varchar2(30);
--声明游标
cursor TAGENTMENUd is select * from t_claim_list_record where 1=1;

begin
for claim in TAGENTMENUd LOOP

    --查询出claim_id相等的案件状态并赋值给变量claim_status_bj
    select CLAIM_STATUS into claim_status_bj from ma_01 where claim_id = claim.claim_id;
    --查询出claim_id相等的案件状态并赋值给变量CONFIRM_SEQUENCE
    select CONFIRM_SEQUENCE_NO into CONFIRM_SEQUENCE from ma_02 where claim_id=claim.claim_id;
    --拼接去重后轨迹表ma_01中的案件状态并根据claim_id赋值给变量claim_status_pj
    select listagg(claim_status,',') within group(order by CLAIM_STATUS) into claim_status_pj from ma_01 where claim_id=claim.claim_id;
    --拼接去重后重开轨迹表ma_03中的案件状态,并根据claim_id赋值给变量claim_starus_ck
    select listagg(claim_status,',') within group(order by CLAIM_STATUS) into claim_starus_ck from ma_03 where claim_id=claim.claim_id;
    --将拼接后的案件状态进行对应转换

      --插入操作  
        insert into T_CLAIM_NEW(ClaimId,AreaCode,ClaimQueryNo,POLICYCONFIRMNO,CLAIM_STATUS,G_CLAIM_STATUS,REOPEN_CLAIM_STATUS) 
            values(claim.claim_id,'110000',claim.claim_code,CONFIRM_SEQUENCE,claim_status_bj,claim_status_pj,claim_starus_ck);

END LOOP;
end;
/                                                                                                               
************************************************************************************************************************************************    
注意点:
1、在函数创建过程中遇到变量问题,想要给查询出来的东西赋值,赋值语法为:
    'select 字段名(公式) into 变量名 from tablename where 条件语句'

2、函数中的循环   如上述所示
for '变量' in '范围/结果集' loop 

猜你喜欢

转载自blog.csdn.net/m983373615/article/details/81030573