CREATE OR REPLACE PROCEDURE synchronous_pm_t_material AS PRAGMA AUTONOMOUS_TRANSACTION; ---打开自动事务机制,此处的分号别忘了
last_version VARCHAR2(14);
current_version VARCHAR2(14);
CURSOR sync_row_cursor(p_last_version varchar2,p_current_version varchar2)
IS
SELECT OBJID,OBJVERSION,PART_NO AS MATERIAL_NO,DESCRIPTION AS MATERIAL_NAME,REQUISITION_NO,LINE_NO,STATE AS PROCESS_TYPE,1 AS AREA,
REQUESTED_QTY AS AMOUNT,BUY_UNIT_MEAS AS UNIT,TYPE_DESIGNATION AS SPEC,DIM_QUALITY AS IMAGE_NO,ACCOUNTING_GROUP AS ACCOUNT,
REQUISITIONER_ORG AS ORG,CONTACT,BUYER_CODE,DEL_DES_CODE,NOTE_TEXT AS NOTES,VENDOR_NO
FROM GZB_EPMS_material WHERE OBJVERSION > p_last_version AND OBJVERSION <= p_current_version
UNION
SELECT OBJID,OBJVERSION,PART_NO AS MATERIAL_NO,DESCRIPTION AS MATERIAL_NAME,REQUISITION_NO,LINE_NO,STATE AS PROCESS_TYPE,2 AS AREA,
REQUESTED_QTY AS AMOUNT,BUY_UNIT_MEAS AS UNIT,TYPE_DESIGNATION AS SPEC,DIM_QUALITY AS IMAGE_NO,ACCOUNTING_GROUP AS ACCOUNT,
REQUISITIONER_ORG AS ORG,CONTACT,BUYER_CODE,DEL_DES_CODE,NOTE_TEXT AS NOTES,VENDOR_NO
FROM TG_EPMS_material WHERE OBJVERSION > p_last_version AND OBJVERSION <= p_current_version;
BEGIN
SELECT last_SYNCHRONOUS_TIME INTO last_version FROM (SELECT (to_char(SYNCHRONOUS_TIME,'yyyymmddhhmiss')) AS last_SYNCHRONOUS_TIME FROM PM_T_SYNC_TIME ORDER BY SYNCHRONOUS_TIME DESC) WHERE ROWNUM <= 1;
SELECT to_char(SYSDATE,'yyyymmddhhmiss') INTO current_version FROM dual;
FOR sync_row IN sync_row_cursor(last_version,current_version)
LOOP
IF (fun_material_haved(sync_row.objid)=0) THEN
INSERT INTO pm_t_material(MATERIAL_ID,material_no,material_name,requisition_no,line_no,process_type,area,amount,unit,spec,account,org,contact
,buyer_code,del_des_code,notes,vendor_no,image_no,objid,objversion,create_type,create_date,update_date) VALUES (
seq_pm_t_material.nextval,sync_row.material_no,sync_row.material_name,sync_row.requisition_no,sync_row.line_no,coverToProcessType(sync_row.process_type),
sync_row.area,sync_row.amount,sync_row.unit,sync_row.spec,sync_row.account,sync_row.org,sync_row.contact,coverToBuyerCode(sync_row.buyer_code),sync_row.del_des_code,
sync_row.notes,sync_row.vendor_no,sync_row.image_no,sync_row.objid,sync_row.objversion,1,to_date(current_version,'yyyy-mm-dd hh:mi:ss'),to_date(current_version,'yyyy-mm-dd hh:mi:ss'));
ELSE
UPDATE pm_t_material SET material_no= sync_row.material_no,material_name=sync_row.material_name,requisition_no=sync_row.requisition_no,
line_no=sync_row.line_no,process_type=coverToProcessType(sync_row.process_type),area=sync_row.area,amount=sync_row.amount,unit=sync_row.unit,spec=sync_row.spec,
account=sync_row.account,org=sync_row.org,contact=sync_row.contact,buyer_code=coverToBuyerCode(sync_row.buyer_code),del_des_code=sync_row.del_des_code,
notes=sync_row.notes,vendor_no=sync_row.vendor_no,image_no=sync_row.image_no,objversion=sync_row.objversion,update_date=to_date(current_version,'yyyy-mm-dd hh:mi:ss')
WHERE objid = sync_row.objid;
END IF;
END LOOP;
INSERT INTO PM_T_SYNC_TIME(SYNCHRONOUS_TIME) VALUES(to_date(current_version,'yyyy-mm-dd hh:mi:ss'));
COMMIT; --提交别忘了,要不然执行完成就自动回滚了
END synchronous_pm_t_material;
分享到:
相关推荐
oracle 存储过程 函数 dblink 绝对对工作和平时学习有价值的资料。针对个人具体情况做修改即可使用
dblink_clob字段异常解决方案,解决dblink连接远程数据库时无法使用clob字段的问题
执行存储过程,通过指定目标数据库登录信息,动态生成dblink,打开游标,按批次插入本地指定表中,每批次1万条数据。同步记录和日志信息写在自动生成的sync_log表中。同步完成后自动删除动态生成的存储过程、dblink...
dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink
主要介绍了Oracle报存储过程中调用DBLink同义词出现错误:PLS-00201: 必须声明标识符的相关资料,需要的朋友可以参考下
oracle使用dblink在两个数据库中比对数据库表的行数是否一致
oracle 创建dblink的详细步骤,以及使用oracle快照快速的刷新,保持本地与远程数据库的同步
oracle通过DBlink连接mysql搭建过程
DBLINk
oracle 使用dblink方式 连接远程数据库,内有详细描述,亲测可以
Linux下ORACLE 使用dblink连接mysql_lijilinjy的专栏-CSDN博客.mhtml
本周由于公司一个系统的oracle数据库需要采集另一个系统mysql数据库的数据,于是对oracle通过dblink连接mysql进行了研究,测试环境是单实例oracle 10g 64位,折腾了半天搞定了,但是生产环境是10g rac,原本以为会很...
当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。下面讲介绍如何在本地数据库中创建...
以迁移scott用户下所有的表为例演示Oracle使用dblink导用户下的所有表数据
DBlink的应用 DBlink的应用 DBlink的应用
Oracle之dblink的配置 Oracle之dblink的配置 Oracle之dblink的配置 Oracle之dblink的配置
该存储过程实现源数据库按照时间同步更新计算库的过程 实现表的同步以及动态表某期间的数据同步。 该存储过程主要演示了: 1.dblink创建和dblink的使用; 2.如何使用字典表和游标实现选择性数据同步。
本文详细描述了在oracle10g或11g中使用dblink访问sql server,使用oracle的透明网关来访问异构的数据库,方便一些习惯使用oracle的开发人员操作sql server数据库
本文介绍了解决Oracle杀死死锁进程的方法。
俩台不同的数据库服务器,从一台数据库服务器的一个用户读取另一台数据库服务器下的某个用户的数据,这个时候可以使用dblink。