2014-04-24 30 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