通过使用Oracle作为中间容器编写存储过程,将Sql Server的数据实时同步到MySql,不直接在SqlServer中进行操作。
公司最近的项目要部署上线了,然后需要将甲方公司的ERP,OA,MES,PLM等系统的数据同步到我们的系统之中来,但是因为各个系统的厂家不一样有用友的ERP,致远的OA等等所以数据库有多种,Sql Server,Oracle,Mysql都有,而我们的系统使用的是Mysql,所以如何实现数据同步是个大问题。最初项目经理给出了几种方案,第一种是写定时任务定时的去取数据,第二种就是写存储过程去同步数据,无论哪种方式都需要有几个原则,首先是无论哪种方式都不可以直接在甲方公司的数据库上直接进行操作这是为了避免纠纷,第二个就是如果甲方的数据发生修改如何保证数据一致性。接下来我讲以从Sql Server同步到MySQL作为列子进行介绍。
1.找到需要同步的表
找到需要甲方的数据库你需要同步的表,然后确认好自己需要同步过去的数据有哪些,可以指定列可以不全部导入。
2.在自己的数据库中建立接收表
在自己的目标数据库中新建一张表接收数据,当然也可以不新建,如果有原始表可以将数据直接同步到原始表但是数据类型需要是一致的
3.编写存储过程
CREATE OR REPLACE PROCEDURE P_QUALICY_SPT IS
V_NUM1 number;
LI_RESULT_NO INTEGER;
LS_RESULT_TXT VARCHAR2(255);
BEGIN
FOR SE IN (SELECT ID,
CCHECKCODE,
CINSPECTCODE,
FQUANTITY,
FDTQUANTITY,
FDISBREAKQUANTITY,
FREGQUANTITY,
CSOURCE,
CINSPECTPERSON,
CDEFINE8,
DMAKETIME
FROM QMCHECKVOUCHER@Spt_Ufdata_Link) LOOP
SELECT count(1)
INTO V_NUM1
FROM "t_quality_spt"@spt_jzz_link
WHERE "ID" = SE.ID;
IF V_NUM1 < 1 THEN
-- insert
INSERT INTO "t_quality_spt"@spt_jzz_link
("ID",
"CCHECKCODE",
"CINSPECTCODE",