1. 程式人生 > >儲存過程中使用dblink,碰到dblink死鎖解決方案

儲存過程中使用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;

相關推薦

儲存過程使用dblink,碰到dblink解決方案

CREATE OR REPLACE PROCEDURE synchronous_pm_t_material AS PRAGMA AUTONOMOUS_TRANSACTION; ---開啟自動事務機制,此處的分號別忘了     last_version VARCHAR2(14)

weblogic使用過程的部分報錯與解決方案

fuse hang not 切換 failure tin pre 編輯 get 報錯一: vim中 E212:無法打開並寫入文件 編寫配置文件時,常常忘記切換到root用戶,導致文件編輯完畢,敲入:wq 退出保存時,出現 E212:無法打開並寫入文件 的錯誤提示。這是由於在

sql server解決方案

問題場景:在客戶那碰到一個操作卡死的現象 問題解決: 1、如何掛鉤是死鎖問題:通過程式碼跟蹤,發現是指執行一個SQL語句超時,因此猜想可能是表鎖住了 2、如果確認是思索問題:通過SQL發現死鎖,以下是相關的SQL  select request_session_id 

(十六)java併發程式設計--執行緒的解決方案(生產者和消費者幾種實現方式)

上一篇中,主要了解了什麼時候死鎖,並且提出死鎖的一個解決方案,多個鎖要按照一定的順序來。 本片主要是利用生產者消費者模式解決執行緒的死鎖。 多執行緒生產者和消費者一個典型的多執行緒程式。一個生產者生產提供消費的東西,但是生產速度和消費速度是不同的。這就需要讓

Git配置過程出現的問題,以及解決方案

    提示出錯資訊:fatal: remote origin already exists.     解決辦法如下:     1、先輸入$ git remote rm origin   

ionic android 編譯打包過程遇到的一些問題及解決方案

操作環境 ionic framework 3.9.2、 cordova (Cordova CLI) 8.1.2、ionic (Io

oracle ora-02020 儲存過程dblink使用個數問題

今天晚上加班,有個儲存過程,裡面已經有4個dblink了,但是由於業務需要,還需要再加幾個,在加到第五個的時候,系統忽然丟擲一個錯誤:ora-02020 too many database links in use。諮詢oracle工程師,得出的結論是在oracle的系統引數

async、await在ASP.NET[ MVC]之線程的故事

div pos ask 其他 flow ron ttpClient com async 場景重構 public ActionResult Index(string ucode) { string userInfo = G

SQL儲存過程分頁

</pre><pre name="code" class="sql">ALTER proc [dbo].[GetGoodsLsit] ----分頁條件 @StartIndex varchar(20), @PageSize varchar(20), ----排序條件

虛擬機器(VMware)安裝ubuntu18過程總是被卡或者不能輸入name,password解決辦法

         虛擬機器(VMware)安裝ubuntu18過程中總是被卡死或者不能輸入name,password解決辦法 問題描述: 虛擬機器(VMware)安裝ubuntu 18.4過程中總是被卡死或者不能輸入name,passwo

如何在儲存過程執行set命令  我來答

1.EXEC使用EXEC命令兩種用種執行儲存程另種執行態批處理所講都第二種用  面先使用EXEC演示例,程式碼1DECLARE @TableName VARCHAR(50),@Sql NVARCHAR (MAX),@OrderID INT;SET @TableName = 'Orders';SET @Orde

MySql儲存過程傳參和不傳參以及java呼叫程式碼

資料庫表結構 1.mysql不傳參寫儲存過程 create procedure product() -- product為儲存過程名稱 begin select * from book; end 呼叫此儲存過程為 CALL product

【轉載】postgresql儲存過程返回型別

前言 假如需要在pg上面寫儲存過程,那麼返回型別必定是一個疑問點。 一般而言,對於一個查詢語句,為了可以統一動態返回各種資料,我們是不會蠢到每一個儲存過程都額外編寫一個返回型別 譬如: (id,name,password) 之類的,所以在寫的時候肯定會考慮 setof record這個動

儲存過程一維陣列接受按分割符拆分的資料

declare -- Local variables here i integer; Lar_Input t_Arr.Arrname; --一維陣列接收 按分隔符拆分 begin -- Test statements here Pkg_n_Cst_String.Pr

sql在所有儲存過程查詢包含某字串的執行語句

直接在查詢分析器中執行以下程式碼就行: 方法一) select name from sysobjects o, syscomments s where o.id = s.id and text like '%test%' and o.xtype = 'P'   方法二)

Oracle 儲存過程傳送郵件,並支援使用者驗證 中文標題和內容

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

關於在專案遇到MySQL資料庫的問題

在MySQL中, 當一個事務去更新某條資料, 還沒有提交的時候, 第二個事務去更新該資料, 則會出現等待獲取鎖超時異常: >>  Lock wait timeout exceeded; try restarting transaction 此異

oracle12C資料庫JSON的應用 --PL/SQL儲存過程JSON解析應用篇

最近有些專案在資料庫oracle中使用到json格式的資料互動,對於oracle12以上的版本都支援JSON格式資料的使用,剛剛接觸的猿們可以到上一篇oracle資料庫使用json的簡單入門,最好參考官方的API文件關於oracle官方API文件對JSON的支援; 下面就比較詳細的說一下,關

oracle儲存過程 RETURNING INTO的含義

DECLARE Row_id ROWID; info VARCHAR2(40); BEGIN INSERT INTO dept VALUES (91, 'SERVICE', 'BEIJING') RETURNING rowid,

儲存過程is的含義

例子: create or replace procedure proc1( para1 varchar2, para2 out varchar2, para3 in out varchar2 ) as v_name varchar2(20); /*變數宣告塊:緊跟著的as (is