我有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。
我认为问题与游标有关,而游标没有正确关闭。如何关闭这些类型的匿名显式游标?
答案 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';