好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

oracle存储过程,增量同步处理数据、根据id新增或更新

TABLE jd_unit( id varchar2 ( 64 ) primary key , unit_name varchar2 ( 500 ), unit_code varchar2 ( 500 ), is_enable char ( 1 ), create_time timestamp , update_time timestamp , sync_time timestamp ); comment on table jd_unit is ‘ 供应商表 ‘ ; comment on column jd_unit.id is ‘ 主键 ‘ ; comment on column jd_unit.unit_name is ‘ 供应商名称 ‘ ; comment on column jd_unit.unit_code is ‘ 供应商编码 ‘ ; comment on column jd_unit.is_enable is ‘ 是否可用:1=可用;0=不可用 ‘ ; comment on column jd_unit.create_time is ‘ 创建时间 ‘ ; comment on column jd_unit.update_time is ‘ 更新时间 ‘ ; comment on column jd_unit.sync_time is ‘ 同步时间 ‘ ;

同步处理的记录时间表:

 CREATE   TABLE   jd_sync_handle(
    id   varchar2 ( 64 )  primary   key  ,
    sync_time   timestamp  ,
    handle_time   timestamp  
);
comment   on   table  jd_sync_handle  is   ‘  数据处理表  ‘  ;
comment   on   column  jd_sync_handle.id  is   ‘  主键,固定取值jd_unit、jd_unit_contract  ‘  ;
comment   on   column  jd_sync_handle.sync_time  is   ‘  上次处理的表中最大同步时间  ‘  ;
comment   on   column  jd_sync_handle.handle_time  is   ‘  上次处理的结束处理时间  ‘ ;

处理表初始化:

 INSERT   INTO  JD_SYNC_HANDLE(ID, SYNC_TIME, HANDLE_TIME)  VALUES  ( ‘  jd_unit  ‘ , TO_TIMESTAMP( ‘  2020-11-20 16:12:43.000000  ‘ ,  ‘  SYYYY-MM-DD HH24:MI:SS:FF6  ‘ ), TO_TIMESTAMP( ‘  2020-11-20 16:12:50.000000  ‘ ,  ‘  SYYYY-MM-DD HH24:MI:SS:FF6  ‘ ));

增量同步处理数据、根据id新增或更新,存储过程:

 CREATE   OR   REPLACE   PROCEDURE  jd_unit_handle  AS 
 --   变量定义在begin在前 
tmp_id jd_unit.id %  TYPE;
tmp_is_enable jd_unit.is_enable  %  TYPE;
tmp_is_delete   varchar2 ( 1  );
tmp_create_time jd_unit.create_time  %  TYPE;
tmp_update_time jd_unit.update_time  %  TYPE;
tmp_unit_name jd_unit.unit_name  %  TYPE;
tmp_unit_code jd_unit.unit_code  %  TYPE;
tmp_sync_time jd_unit.sync_time  %  TYPE;

handle_sync_time JD_SYNC_HANDLE.sync_time  %  TYPE;
dbDataCnt   int  ;

    
  CURSOR  emp_cursor  is   select   DISTINCT  id,is_enable, case  is_enable  when   ‘  1  ‘   then   ‘  0  ‘   else   ‘  1  ‘   end  ,create_time,update_time,unit_name,unit_code,sync_time
      from  jd_unit  where  sync_time > ( select  sync_time  from  JD_SYNC_HANDLE  where  id =  ‘  jd_unit  ‘  );

  BEGIN 
     select  sync_time  into  handle_sync_time  from  JD_SYNC_HANDLE  where  id =  ‘  jd_unit  ‘  ;
    dbms_output.put_line(  ‘  last handle_sync_time:  ‘  ||  handle_sync_time);
      --  循环开始 
     LOOP
    dbms_output.put_line(  ‘  LOOP  ‘  );

    IF   NOT  emp_cursor % ISOPEN   THEN 
      OPEN   emp_cursor;
    END   IF  ; 
  
    FETCH  emp_cursor  INTO    tmp_id,tmp_is_enable,tmp_is_delete,tmp_create_time,tmp_update_time,tmp_unit_name,tmp_unit_code,tmp_sync_time;
    
    dbms_output.put_line(  ‘  FETCH-->id:  ‘  ||  tmp_id);
    
      if  tmp_id !=  ‘  exit  ‘   then   
            dbms_output.put_line(  ‘  handle data  ‘  );
              --   处理同步时间:取查找的数据最大时间 
             if  tmp_sync_time > handle_sync_time  then   
                handle_sync_time:  =  tmp_sync_time;
                dbms_output.put_line(  ‘  handle_sync_time change:  ‘  ||  handle_sync_time);
              else  dbms_output.put_line( ‘  handle_sync_time no change  ‘  );
              end   if  ;
              --   处理数据 
             --   查询该id是否存在表中 
             select   count ( 1 )  into  dbDataCnt  from  yf_unit_type  where  id =  tmp_id;
            dbms_output.put_line(  ‘  dbDataCnt:  ‘  ||  dbDataCnt);
              --   判断是否存在该数据 
             if  dbDataCnt =  0   then 
                 insert   into   YF_UNIT_TYPE(ID,IS_ENABLE,IS_DELETE,CREATE_TIME,CREATE_USER_ID,UPDATE_TIME,UPDATE_USER_ID,UNIT_NAME,UNIT_CODE,UNIT_TYPE)
        values (tmp_id,tmp_is_enable,tmp_is_delete,tmp_create_time, ‘  1  ‘ ,tmp_update_time, ‘  1  ‘ ,tmp_unit_name,tmp_unit_code, ‘  a,b  ‘  );
              else  
                     update  YF_UNIT_TYPE  set  IS_DELETE = tmp_is_delete,IS_ENABLE = tmp_is_enable,CREATE_TIME = tmp_create_time,UPDATE_TIME = tmp_update_time,UNIT_NAME = tmp_unit_name,UNIT_CODE =  tmp_unit_code
                  where  id =  tmp_id;
              end   if  ;
              --   重置下是否存在表中 
            dbDataCnt: =  0  ;
      else  dbms_output.put_line( ‘  no data to handle  ‘  );
    end   if  ;
    
    
    --  退出循环的条件 
   EXIT   WHEN  emp_cursor % NOTFOUND  OR  emp_cursor % NOTFOUND  IS   NULL  ;
    
      --   退出设置id为值为exit 
    tmp_id: =  ‘  exit  ‘  ;
    
      END   LOOP;
    dbms_output.put_line(  ‘  END LOOP  ‘  );
    
      --   更新last handle_sync_time 
     update  JD_SYNC_HANDLE  set  sync_time = handle_sync_time,handle_time = sysdate  where  id =  ‘  jd_unit  ‘  ;
  END ;

 

oracle存储过程,增量同步处理数据、根据id新增或更新

标签:timestamp   创建时间   com   hang   变量   mes   weight   更新时间   sysdate   

查看更多关于oracle存储过程,增量同步处理数据、根据id新增或更新的详细内容...

  阅读:46次