您的位置:首页 > 数据库

数据库同步(一)

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: