数据库同步(一)
2008-07-07 15:15
141 查看
方法一:
PROCEDURE Update_FIM_CDM_CONTRACTS IS
V_SYNCH_TYPE VARCHAR2(30); -- 同步类型
v_old_contract_header_id NUMBER; --合同号ID
v_last_update_date DATE; -- 最近更新时间
BEGIN
REPORT_LINE('[' || TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
|| ']开始同步CDM合同号信息...');
--设置同步类型
V_SYNCH_TYPE := 'CDM_CONTRACT';
--遍历所有合同号
FOR REC IN (SELECT *
FROM apps.cdm_contract_headers_v_to_fol@to_cms.world
/*WHERE rownum = 1*/
)
LOOP
BEGIN
SELECT contract_header_id, LAST_UPDATE_DATE
INTO v_old_contract_header_id, v_last_update_date
FROM ztefim.zte_fim_cdm_contracts
WHERE contract_header_id = rec.contract_header_id;
EXCEPTION
WHEN OTHERS THEN
v_old_contract_header_id := 0;
END;
IF v_old_contract_header_id = 0 THEN
--插入合同号
INSERT INTO ztefim.zte_fim_cdm_contracts
(last_update_date,
last_updated_by,
creation_date,
created_by,
last_update_login,
ENABLED_FLAG,
contract_header_id,
contract_number,
hc_contract_id,
hc_contract_number,
org_id
,
org_name,
customer_id,
customer_number,
customer_name,
sale_org_id
,
sale_org_name,
sale_region_id,
sale_region,
salesrep_id,
salesrep_name
,
currency_code,
contract_amount,
conclude_amount)
VALUES
(SYSDATE,
0,
SYSDATE,
0,
0,
rec.enabled_flag,
rec.contract_header_id,
rec.contract_number,
rec.hc_contract_id,
rec.hc_contract_number,
rec.org_id
,
rec.NAME,
rec.customer_id,
rec.customer_number,
rec.customer_name,
rec.sale_org_id
,
rec.sale_org_name,
rec.sale_region_id,
rec.sale_region_name,
rec.salesrep_id,
rec.salesrep_name
,
rec.currency_code,
rec.contract_amount,
rec.conclude_amount);
ELSE
IF v_last_update_date != rec.LAST_UPDATE_DATE THEN
--更新数据
UPDATE ztefim.zte_fim_cdm_contracts
SET last_update_date = rec.last_update_date,
contract_number = rec.contract_number,
hc_contract_id = rec.hc_contract_id,
hc_contract_number = rec.hc_contract_number,
org_id = rec.org_id,
ENABLED_FLAG = rec.ENABLED_FLAG,
org_name = rec.NAME,
customer_id = rec.customer_id,
customer_number = rec.customer_number,
customer_name = rec.customer_name,
sale_org_id = rec.sale_org_id
,
sale_org_name = rec.sale_org_name,
sale_region_id = rec.sale_region_id,
sale_region = rec.sale_region_name,
salesrep_id = rec.salesrep_id,
salesrep_name = rec.salesrep_name
,
currency_code = rec.currency_code,
contract_amount = rec.contract_amount,
conclude_amount = rec.conclude_amount
WHERE contract_header_id = rec.contract_header_id;
END IF;
END IF;
END LOOP;
--报告成功同步结果
REPORT_LINE('[' || TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
|| ']同步CDM合同号信息完毕!');
COMMIT;
-- 记录同步历史
SET_SYNCH_HISTORY(SYSDATE, V_SYNCH_TYPE, 'Y', NULL);
EXCEPTION
WHEN OTHERS THEN
--报告失败同步结果
REPORT_LINE('[' || TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
|| ']CDM合同号信息同步异常:' || SQLERRM);
ROLLBACK;
-- 记录同步历史
SET_SYNCH_HISTORY(SYSDATE, V_SYNCH_TYPE, 'N', SQLERRM);
END;
--输出信息
PROCEDURE REPORT_LINE(P_TEXT VARCHAR2) IS
BEGIN
IF V_REPORT_FLAG = 'Y' THEN
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT, P_TEXT);
ELSE
DBMS_OUTPUT.ENABLE(4000000);
DBMS_OUTPUT.PUT_LINE(P_TEXT);
END IF;
EXCEPTION
WHEN OTHERS THEN
V_REPORT_FLAG := 'N';
DBMS_OUTPUT.ENABLE(4000000);
DBMS_OUTPUT.PUT_LINE(P_TEXT);
END;
--
-- 将同步信息插入同步历史表中
--
INSERT INTO ZTE_FBP_SYNCH_HISTORIES
(
SYNCH_DATE,
SYNCH_TYPE,
SUCCEED_FLAG,
MEMO)
VALUES
(P_SYNCH_DATE,
P_SYNCH_TYPE,
P_SUCCEED_FLAG,
P_MEMO);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
NULL;
END SET_SYNCH_HISTORY;
PROCEDURE Update_FIM_CDM_CONTRACTS IS
V_SYNCH_TYPE VARCHAR2(30); -- 同步类型
v_old_contract_header_id NUMBER; --合同号ID
v_last_update_date DATE; -- 最近更新时间
BEGIN
REPORT_LINE('[' || TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
|| ']开始同步CDM合同号信息...');
--设置同步类型
V_SYNCH_TYPE := 'CDM_CONTRACT';
--遍历所有合同号
FOR REC IN (SELECT *
FROM apps.cdm_contract_headers_v_to_fol@to_cms.world
/*WHERE rownum = 1*/
)
LOOP
BEGIN
SELECT contract_header_id, LAST_UPDATE_DATE
INTO v_old_contract_header_id, v_last_update_date
FROM ztefim.zte_fim_cdm_contracts
WHERE contract_header_id = rec.contract_header_id;
EXCEPTION
WHEN OTHERS THEN
v_old_contract_header_id := 0;
END;
IF v_old_contract_header_id = 0 THEN
--插入合同号
INSERT INTO ztefim.zte_fim_cdm_contracts
(last_update_date,
last_updated_by,
creation_date,
created_by,
last_update_login,
ENABLED_FLAG,
contract_header_id,
contract_number,
hc_contract_id,
hc_contract_number,
org_id
,
org_name,
customer_id,
customer_number,
customer_name,
sale_org_id
,
sale_org_name,
sale_region_id,
sale_region,
salesrep_id,
salesrep_name
,
currency_code,
contract_amount,
conclude_amount)
VALUES
(SYSDATE,
0,
SYSDATE,
0,
0,
rec.enabled_flag,
rec.contract_header_id,
rec.contract_number,
rec.hc_contract_id,
rec.hc_contract_number,
rec.org_id
,
rec.NAME,
rec.customer_id,
rec.customer_number,
rec.customer_name,
rec.sale_org_id
,
rec.sale_org_name,
rec.sale_region_id,
rec.sale_region_name,
rec.salesrep_id,
rec.salesrep_name
,
rec.currency_code,
rec.contract_amount,
rec.conclude_amount);
ELSE
IF v_last_update_date != rec.LAST_UPDATE_DATE THEN
--更新数据
UPDATE ztefim.zte_fim_cdm_contracts
SET last_update_date = rec.last_update_date,
contract_number = rec.contract_number,
hc_contract_id = rec.hc_contract_id,
hc_contract_number = rec.hc_contract_number,
org_id = rec.org_id,
ENABLED_FLAG = rec.ENABLED_FLAG,
org_name = rec.NAME,
customer_id = rec.customer_id,
customer_number = rec.customer_number,
customer_name = rec.customer_name,
sale_org_id = rec.sale_org_id
,
sale_org_name = rec.sale_org_name,
sale_region_id = rec.sale_region_id,
sale_region = rec.sale_region_name,
salesrep_id = rec.salesrep_id,
salesrep_name = rec.salesrep_name
,
currency_code = rec.currency_code,
contract_amount = rec.contract_amount,
conclude_amount = rec.conclude_amount
WHERE contract_header_id = rec.contract_header_id;
END IF;
END IF;
END LOOP;
--报告成功同步结果
REPORT_LINE('[' || TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
|| ']同步CDM合同号信息完毕!');
COMMIT;
-- 记录同步历史
SET_SYNCH_HISTORY(SYSDATE, V_SYNCH_TYPE, 'Y', NULL);
EXCEPTION
WHEN OTHERS THEN
--报告失败同步结果
REPORT_LINE('[' || TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
|| ']CDM合同号信息同步异常:' || SQLERRM);
ROLLBACK;
-- 记录同步历史
SET_SYNCH_HISTORY(SYSDATE, V_SYNCH_TYPE, 'N', SQLERRM);
END;
--输出信息
PROCEDURE REPORT_LINE(P_TEXT VARCHAR2) IS
BEGIN
IF V_REPORT_FLAG = 'Y' THEN
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT, P_TEXT);
ELSE
DBMS_OUTPUT.ENABLE(4000000);
DBMS_OUTPUT.PUT_LINE(P_TEXT);
END IF;
EXCEPTION
WHEN OTHERS THEN
V_REPORT_FLAG := 'N';
DBMS_OUTPUT.ENABLE(4000000);
DBMS_OUTPUT.PUT_LINE(P_TEXT);
END;
--
-- 将同步信息插入同步历史表中
--
INSERT INTO ZTE_FBP_SYNCH_HISTORIES
(
SYNCH_DATE,
SYNCH_TYPE,
SUCCEED_FLAG,
MEMO)
VALUES
(P_SYNCH_DATE,
P_SYNCH_TYPE,
P_SUCCEED_FLAG,
P_MEMO);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
NULL;
END SET_SYNCH_HISTORY;
相关文章推荐
- 数据库增量同步(二台SQL Server服务器的数据库之间增量传输数据)(jaime原创)
- 求SQL数据库同步方法或程序参考(可以在同一服务器中两数据库之间),要不毕设晚了
- mysql主从复制实现数据库同步
- 两个数据库同步分发
- Django进阶Model篇003 - 数据库同步技巧
- PLSQL Developer实现数据库间表结构和数据对比和同步
- 用于Django工程数据库同步改动的South
- 本地数据库同步到云主机上
- Django1.9 models数据库同步问题
- SQL Server 2008 数据库同步的两种方式(发布、订阅)
- SQL Server 2008 R2 主从数据库同步
- SqlServer2005 数据库同步配置详解
- informatica 数据库之间的多表数据同步(全量/增量)以及variable的使用问题
- Domino9下通过定时代理—使多台domino 服务器进行数据库复制(同步)
- MySQL主从数据库同步
- 连接目标数据库+无恢复目录连接目标数据库+使用有恢复目录连接目标数据库+注册数据库+目录同步+取消目标数据库的连接
- 【MongoDB】windows下搭建Mongo主(Master)/从(slave)数据库同步
- 不同数据库之间的实时同步
- MySQL5.6 数据库主从(Master/Slave)同步安装与配置详解
- mysql_数据库的同步问题