ORA-02080:正在使用数据库链接

时间:2016-07-11 06:47:52

标签: oracle session cursor commit dblink

我有10个函数,每个函数都使用dblinks返回一个表。

结构就像

    function declare
.
.
.
begin
.
if
for i in ( select * from table@dblinks)

loop

i.
i.
i.

--return tble
pipe row(obj);

end loop;
end if;
--close dblink statement..
execute immediate 'ALTER SESSION CLOSE DATABASE LINK TEST_LINK';

end;

所有功能都是这样的。

我在关闭数据库链接之前尝试了回滚和提交,但它返回错误:

  

ORA-14552:无法在查询或DML中执行DDL,提交或回滚

我想关闭dblink。

我认为问题与游标有关,而游标没有正确关闭。如何关闭这些类型的匿名显式游标?

1 个答案:

答案 0 :(得分:0)

PL / SQL尝试缓存游标,这意味着它并没有真正关闭游标。 您应该能够使用alter session告诉它不要缓存,然后关闭链接。

execute immediate 'ALTER SESSION SET SESSION_CACHED_CURSORS = 0';
dbms_session.CLOSE_DATABASE_LINK('####');
execute immediate 'ALTER SESSION SET SESSION_CACHED_CURSORS = 50';