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;
在实际操作中对表数据的批量操作,循环操作的速度要快很多。