`
sbpya
  • 浏览: 615974 次
  • 性别: Icon_minigender_1
  • 来自: 杭州,长沙
社区版块
存档分类
最新评论

存储过程中使用dblink,碰到dblink死锁解决方案

 
阅读更多

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

    本文主要介绍了Oracle存储过程的概念、创建和调用方法,以及如何使用DBLink实现跨库操作。存储过程提供了强大的数据库处理能力,而DBLink则使得不同数据库实例之间的交互变得更加方便和高效。掌握这些技术对于提高...

    dblink_clob字段异常解决方案

    dblink_clob字段异常解决方案 在数据库.link连接远程数据库时,经常会遇到无法使用CLOB字段的问题,这是因为CLOB字段在远程数据库中的处理方式与本地数据库不同所导致的。下面将讨论解决dblink_clob字段异常的解决...

    oracle使用dblink高速复制表数据的动态存储过程

    执行存储过程,通过指定目标数据库登录信息,动态生成dblink,打开游标,按批次插入本地指定表中,每批次1万条数据。同步记录和日志信息写在自动生成的sync_log表中。同步完成后自动删除动态生成的存储过程、dblink...

    dblink dblink dblink dblink dblink 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同义词时,可能会遇到“PLS-00201: 必须声明标识符”的错误。这个错误通常表明编译器无法识别你引用的对象,可能是由于权限问题或者对象定义未正确导入。下面...

    oracle通过DBlink连接mysql搭建过程

    本文将详细说明这个过程,帮助读者了解如何使用 DBlink 连接 Oracle 和 MySQL 数据库。 首先,需要安装 unixODBC,unixODBC 是一个开源的 ODBC 驱动程序,允许用户使用 ODBC 连接各种数据库,包括 MySQL。安装 ...

    DBLink的创建和使用

    在本文中,我们将深入探讨DBLink的创建和使用方法。 首先,创建DBLink的先决条件是本地数据库用户必须拥有相应的权限。有三种与DBLink相关的权限: 1. CREATE DATABASE LINK:仅创建者可以使用的私有DBLink。 2. ...

    oracle dblink 创建过程

    可以使用`@dblink`语法来查询远程数据库中的表: ```sql SELECT * FROM bctl@creditdb; ``` 2. **创建同义词** 为了方便使用,还可以为远程表创建同义词: ```sql CREATE SYNONYM syn_bctl FOR bctl@...

    oracle 使用dblink方式 连接远程数据库,内有详细描述,亲测可以

    本文详细介绍了如何在Oracle中使用DBLink连接远程数据库,包括必要的准备工作、创建过程以及注意事项等内容。正确配置和使用DBLink可以帮助我们轻松地实现跨数据库操作,提高开发效率和系统灵活性。在实际应用过程中...

    DBLINk

    静态DBLINK一旦创建,就会作为数据库对象存储在源数据库中,供后续查询和操作使用。 2. **动态DBLINK**:这种类型的DBLINK是在运行时动态创建的,主要用于那些事先未知或不固定的远程数据库链接场景。动态DBLINK...

    记一次oracle通过dblink连接mysql实施

    本文记录了一次在Oracle 10g 64位环境中,通过DBLink连接到MySQL 5.5的过程,并在面临RAC环境中的问题时找到了解决方案。 首先,Oracle 10g 64位版本的HSODBC(异构服务)可能出现问题,表现为HSODBC文件大小为0,...

    oracle使用dblink的例子

    接下来,代码中演示了如何使用DBLink来比较两个数据库中相同表的行数是否一致。具体步骤如下: 1. **声明变量**: - `v_targetrecordcount`:存储目标数据库中表的行数。 - `v_sourcerecordcount`:存储源数据库...

    oracle通过dblink链接 mysql和mssql例子

    通过DBLink,用户可以查询远程数据库中的表,并执行远程数据库上的存储过程。但需要注意的是,DBLink通常是单向的连接。 创建DBLink之前,必须保证以下几点: 1. 本地数据库到远程数据库之间的网络连接正常,可以...

    Altium Designer 6中DBlink使用

    ### Altium Designer 6中DBlink使用详解 #### 一、引言 Altium Designer (简称AD) 是一款广泛应用于电子设计领域的软件工具,能够帮助工程师进行原理图设计、PCB布局以及各种电气特性的仿真等工作。随着技术的发展...

    Linux下ORACLE 使用dblink连接mysql_lijilinjy的专栏-CSDN博客.mhtml

    Linux下ORACLE 使用dblink连接mysql_lijilinjy的专栏-CSDN博客.mhtml

    DBlink的应用 DBlink的应用

    上述脚本首先清空目标表`A`,然后使用`@AAA_LINK` DBLink从源数据库`AAA`中读取表`A`的所有数据,并插入到目标数据库`BBB`的表`A`中。最后,通过查询`v$option`视图检查当前数据库是否支持Advanced Replication功能...

    Oracle DATABASE LINK(DBLINK)创建与删除方法

    DBLINK为跨数据库的通信提供了简单且高效的解决方案。 创建DBLINK的语法如下: ```sql CREATE [PUBLIC] DATABASE LINK [name] CONNECT TO [username] IDENTIFIED BY [password] USING '(DESCRIPTION = (ADDRESS_...

    Oracle-不同数据库DBLINK导数据使用说明

    这是因为BLOB数据在DBLINK中传输时存在性能瓶颈,且可能导致数据不完整或丢失。 ### 三、处理BLOB数据的挑战与解决方案 当尝试通过DBLINK插入包含BLOB字段的数据时,如: ```sql INSERT INTO local_testTable (id...

    Oracle DBLink建立连接

    - **安全性增强**:为了进一步提高安全性,可以在创建DBLink时指定使用SSL加密传输数据,确保数据在传输过程中的安全。 - **定期审查**:建议定期审查所有DBLink的使用情况和权限设置,及时撤销不再需要的DBLink或者...

    dblink创建与数据同步

    该存储过程实现源数据库按照时间同步更新计算库的过程 实现表的同步以及动态表某期间的数据同步。 该存储过程主要演示了: 1.dblink创建和dblink的使用; 2.如何使用字典表和游标实现选择性数据同步。

Global site tag (gtag.js) - Google Analytics