Ora-01000 - 最大打开游标超出错误

时间:2011-01-06 13:36:53

标签: database delphi oracle10g cursor

我在Delphi / Oracle应用程序中收到以下错误消息“ora-01000 - 超出最大打开游标数”。代码如下:

begin
  for i := 0 to 150 do 
  begin

    with myADOQuery do
    begin
      SQL.Text := 'DELETE FROM SOMETABLE';
      ExecSQL; -- from looking at V$OPEN_CURSOR a new cursor is added on each iteration for the session
      Close; -- thought this would close the cursor but doesn't
    end;

  end;

end;

我知道我可以通过简单地增加OPEN_CURSORS参数的数量来解决问题,但是,我宁愿找到一个解决方案,在执行查询后关闭游标。有什么想法吗?

Delphi 2006 BDS Oracle 10g

4 个答案:

答案 0 :(得分:2)

  • 阅读Oracle支持文档ID 76684.1和ID 2055810.6。我不使用ADO,但您可能必须找到一种方法来告诉它如何配置Oracle而不是缓存语句。
  • 默认的max_cursor值通常太低,通常更好地增加它,它会使Oracle使用更多的内存,但在实际的机器上它很少是一个问题。
  • 要删除整个表,TRUNCATE可能优于DELETE,除非您必须依赖DELETE行为(即触发触发器)。

答案 1 :(得分:1)

检查this link。我不是Oracle用户,但似乎有一些游标缓存,因为他们说“调整OPEN_CURSORS的最佳建议不是调整它。设置得足够高,你不必担心它。”所以我会说,即使Close命令关闭光标,它仍然保留在缓存中。还有一些提示,如何检查您当前的情况。

答案 2 :(得分:1)

答案 3 :(得分:0)

如果省略关闭会怎样?