从报错信息得知,报错在存储过程的24行:
select count(1) into v_count1 from xxx.xxxx@xxxx where chsj<v_date;
database link名称与报信息一致。
通过网上查找,出现此类报错的原因,是database link使用过多并且没有释放导致 ,一般在使用dblink时会做commit或rollback操作,可以确认后台有没有释放的dblink 。
查询后台没有释放的dblink的会话。(windows)一般program为ORCALE.EXE的是dblink会话
select sid,serial#,program,module from v$session where program = 'ORACLE.EXE'
alter system kill 'sid,serial#' immediate ;
会杀这些会话后,再重新运行存储过程就没报此类错误。
方法二:
在存储过程中添加dblink关闭误语句:
begin
.....
commit;
execute immediate 'alter session close database link test';
end ;