首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ora-01000 -超过最大打开游标错误

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

Stack Overflow用户
提问于 2011-01-06 21:36:53
回答 4查看 3.3K关注 0票数 0

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

代码语言:javascript
复制
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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-06 22:49:21

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

Stack Overflow用户

发布于 2011-01-06 22:15:35

检查this link。我不是Oracle用户,但似乎有一些游标缓存,正如他们所说的:“调优OPEN_CURSORS的最佳建议是不要调优它。将它设置得足够高,这样您就不必担心它了。”所以我要说的是,即使Close命令关闭了游标,它仍然保留在缓存中。还有一些小贴士,告诉你如何检查你的当前状况。

票数 1
EN

Stack Overflow用户

发布于 2011-01-07 00:52:28

请尝试使用TADOCommand组件。

TADOCommand最常用于执行数据定义语言(DDL)命令或执行不返回结果集的存储过程。

或者直接使用TADOConnection.Execute函数

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4615440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档