2014-04-24 31 views
0

我有一個存儲過程如下,當我執行這個過程時,每次在遠程服務器中增加一個遊標。如何解決這個問題。ORACLE中的最大遊標超過數據庫鏈接

create or replace function transactionaldatarecovery 
    (i_tablename in varchar2) 
return varchar2 
as 
    v_Num Number(3):=0; 
    v_SQLStmt Varchar2(2000); 
    ret_status Varchar2(100); 

begin 

       v_sqlstmt := 'insert into '||i_tablename|| 
          ' select * from '||i_tablename||'@RECY_DBLINK a '|| 
          ' where not exists(select 1 '|| 
          '     from '||i_tablename||' b'|| 
          '     where B.sno = A.sno' ; 

     Execute immediate v_SQLstmt; 

return 'Success'; 
end transactionaldatarecovery; 

回答

0

您是否在運行該函數後提交?它應該釋放遠程數據庫上打開的光標。

+0

是的,現在我得到了解決方案。每當光標在遠程服務器中打開時,都會訪問數據庫鏈接。當我們用ALTER語句關閉數據庫鏈接,然後Cursor正在關閉 – user3129868

+0

ALTER是一個DDL語句,並在執行前進行提交。你可以嘗試只做COMMIT,並檢查打開的光標是否被炸。 – vav