当前位置:数据库 > Oracle >>

oracle produce同步中间库

oracle produce同步中间库
 
在一个已有系统上做外网系统,考虑到服务器压力或者没有条件直接连接已有系统的数据库。需要弄一个中间库在特定时间进行业务数据的同步。需要注意的写法 
Sql代码  
INSERT INTO sy_api_c_meter  
        (task_id, meter_id, .... .)  
        SELECT in_task_id, meter_id,.. ..  
            FROM c_meter a, c_mp b, c_meter_mp_rela c  
         WHERE a.meter_id = c.meter_id  
                     AND b.mp_id = c.mp_id  
                     AND b.cons_id = v_cons_id  
                     AND b.org_no = v_org_no  
 
上面的sql中select 查询语句没有性能问题,分区条件和索引都能走上,但是在一起执行insert 时就会很卡。这是刚开始写过程时会犯的错误。应该使用游标,修改结果如下: 
Sql代码  
FOR cur IN (SELECT c.meter_id  
              FROM c_mp b, c_meter_mp_rela c  
             WHERE b.mp_id = c.mp_id  
                   AND b.cons_id = v_cons_id  
                   AND b.org_no = v_org_no)  
LOOP  
    INSERT INTO sy_api_c_meter  
        (task_id, meter_id, inst_loc,....)  
        SELECT in_task_id, meter_id, ....  
          FROM c_meter a  
         WHERE a.meter_id = cur.meter_id;  
END LOOP;  
 
在实际操作中对表数据的批量操作,循环操作的速度要快很多。
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,