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则使得不同数据库实例之间的交互变得更加方便和高效。掌握这些技术对于提高...
dblink_clob字段异常解决方案 在数据库.link连接远程数据库时,经常会遇到无法使用CLOB字段的问题,这是因为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: 必须声明标识符”的错误。这个错误通常表明编译器无法识别你引用的对象,可能是由于权限问题或者对象定义未正确导入。下面...
本文将详细说明这个过程,帮助读者了解如何使用 DBlink 连接 Oracle 和 MySQL 数据库。 首先,需要安装 unixODBC,unixODBC 是一个开源的 ODBC 驱动程序,允许用户使用 ODBC 连接各种数据库,包括 MySQL。安装 ...
在本文中,我们将深入探讨DBLink的创建和使用方法。 首先,创建DBLink的先决条件是本地数据库用户必须拥有相应的权限。有三种与DBLink相关的权限: 1. CREATE DATABASE LINK:仅创建者可以使用的私有DBLink。 2. ...
可以使用`@dblink`语法来查询远程数据库中的表: ```sql SELECT * FROM bctl@creditdb; ``` 2. **创建同义词** 为了方便使用,还可以为远程表创建同义词: ```sql CREATE SYNONYM syn_bctl FOR bctl@...
本文详细介绍了如何在Oracle中使用DBLink连接远程数据库,包括必要的准备工作、创建过程以及注意事项等内容。正确配置和使用DBLink可以帮助我们轻松地实现跨数据库操作,提高开发效率和系统灵活性。在实际应用过程中...
静态DBLINK一旦创建,就会作为数据库对象存储在源数据库中,供后续查询和操作使用。 2. **动态DBLINK**:这种类型的DBLINK是在运行时动态创建的,主要用于那些事先未知或不固定的远程数据库链接场景。动态DBLINK...
本文记录了一次在Oracle 10g 64位环境中,通过DBLink连接到MySQL 5.5的过程,并在面临RAC环境中的问题时找到了解决方案。 首先,Oracle 10g 64位版本的HSODBC(异构服务)可能出现问题,表现为HSODBC文件大小为0,...
接下来,代码中演示了如何使用DBLink来比较两个数据库中相同表的行数是否一致。具体步骤如下: 1. **声明变量**: - `v_targetrecordcount`:存储目标数据库中表的行数。 - `v_sourcerecordcount`:存储源数据库...
通过DBLink,用户可以查询远程数据库中的表,并执行远程数据库上的存储过程。但需要注意的是,DBLink通常是单向的连接。 创建DBLink之前,必须保证以下几点: 1. 本地数据库到远程数据库之间的网络连接正常,可以...
### Altium Designer 6中DBlink使用详解 #### 一、引言 Altium Designer (简称AD) 是一款广泛应用于电子设计领域的软件工具,能够帮助工程师进行原理图设计、PCB布局以及各种电气特性的仿真等工作。随着技术的发展...
Linux下ORACLE 使用dblink连接mysql_lijilinjy的专栏-CSDN博客.mhtml
上述脚本首先清空目标表`A`,然后使用`@AAA_LINK` DBLink从源数据库`AAA`中读取表`A`的所有数据,并插入到目标数据库`BBB`的表`A`中。最后,通过查询`v$option`视图检查当前数据库是否支持Advanced Replication功能...
DBLINK为跨数据库的通信提供了简单且高效的解决方案。 创建DBLINK的语法如下: ```sql CREATE [PUBLIC] DATABASE LINK [name] CONNECT TO [username] IDENTIFIED BY [password] USING '(DESCRIPTION = (ADDRESS_...
这是因为BLOB数据在DBLINK中传输时存在性能瓶颈,且可能导致数据不完整或丢失。 ### 三、处理BLOB数据的挑战与解决方案 当尝试通过DBLINK插入包含BLOB字段的数据时,如: ```sql INSERT INTO local_testTable (id...
- **安全性增强**:为了进一步提高安全性,可以在创建DBLink时指定使用SSL加密传输数据,确保数据在传输过程中的安全。 - **定期审查**:建议定期审查所有DBLink的使用情况和权限设置,及时撤销不再需要的DBLink或者...
该存储过程实现源数据库按照时间同步更新计算库的过程 实现表的同步以及动态表某期间的数据同步。 该存储过程主要演示了: 1.dblink创建和dblink的使用; 2.如何使用字典表和游标实现选择性数据同步。