递归sql级别1出现错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归sql级别1出现错误相关的知识,希望对你有一定的参考价值。

update SYJC_YQCKF_B_WS_MGX_JIANJBXX set analysis_id = generate_key(10), sample_id = generate_key(15)

参考技术A ORA-00604: 递归某个SQL 层时出现错误- initSID.ora中,参数DC_FREE_EXTENTS或ROW_CACHE_ENQUEUES太低uycg可以根据操作系统和数据库的情况适当增加这两个参数的值628宕下并重新启动ORACLE. - 运行超出空间(伴随ORA-1547错误)mq这时,要对表空间添加新文件,即增加表空间的大小ycg- 达到了MAX_EXTENTS(伴随ORA-1556错误)m如果这样,就要修改表,允许更多的扩展。请从技术手册中查找MAX_EXTENTS的最大值。如果已经达到了最大值,必须用compress extents选项28把表卸出(export),再导入(import)数据库中。追问

问题解决了,不知道是不是数据库的问题,执行这句话会出现三种情况,已就是提示如上错误,二是没反应,重新登录再执行却又有了数据,有时候这些东西真心搞不懂……
但还是想追问句 参数DC_FREE_EXTENTS或ROW_CACHE_ENQUEUES 这到哪去找?我找半天也找不到的

本回答被提问者和网友采纳

java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 发生错误

【中文标题】java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 发生错误【英文标题】:java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1 【发布时间】:2012-11-06 10:43:22 【问题描述】:

我收到以下 SQL 异常,但我不知道此异常的根本原因是什么?我也在关闭数据库连接和语句。

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-01000: maximum open cursors exceeded
ORA-00604: error occurred at recursive SQL level 1
ORA-01000: maximum open cursors exceeded
ORA-01000: maximum open cursors exceeded

以下是我的代码:

 while(true)
 

   Statement stmt2 = conn1.createStatement();
   ResultSet rs2 = null;

   int rec_count=0;
   rs2 = stmt2.executeQuery("select count(*) as cnt from   some_table");                                  
    while(rs2.next())
   
     rec_count = rs2.getInt("cnt");
   

   if(rec_count>0)
   
     update_qry_b_trg1 = "update some_table set to_be_triggered=1,algo_status='D',dealer_id='HD001',price_trig_date=sysdate where buy_sell = 'SELL' and ordertype = 'BNLD' and to_be_triggered = 0 and algo_status = 'P' and Mod(group_ref_no,5)="+th_id;

   String final_qry = "BEGIN \n"+update_qry_b_trg1+";\n"+";\n END;";

   int rows = stmt1.executeUpdate(final_qry);
   stmt1.close();
   

   rs2.close();
   stmt2.close();

   

【问题讨论】:

您容易受到 SQL 注入的攻击。请阅读prepared statements 来解决此问题。 您粘贴的代码似乎没有任何光标泄漏。我建议您在运行时检查数据库上的 v$open_cursor 以确定发生了什么。本的观点也很有效, th_id 不应该只是粘贴在那里。另外,如果您只在表中查找 1 行,请不要仅 count(*) 至少添加 where rownum = 1 以减少您所做的工作。 为什么您的更新查询包含在 BEGIN 和 END 中?我认为您的更新查询正在作为 PROCEDURE 执行,并且由于您的 while 循环是无限的,因此会导致问题。 【参考方案1】:

无论在哪里初始化 stmt1,最好在 finally 块中关闭它。在您的情况下,您将在 if 条件下关闭它。如果条件不通过,语句将保持打开状态,您将得到这个

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1

您还需要在 while 循环中运行它,因此您需要确保关闭每个打开的语句。

【讨论】:

以上是关于递归sql级别1出现错误的主要内容,如果未能解决你的问题,请参考以下文章

递归sql级别1出现错误

java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01003: 语句未进行语法分析

jdbc 查询5万条数据出现 ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01000: 超出打开游标的最大数

健康档案管理系统ORA-604: 递归 SQL 级别 %s 出现错误

orcl表空间创建失败ORA-00604:递归SQL级别1出现错误ORA-01013这是哪的问题

ORACLE数据库导表的时候,出现IMP-00017: 由于 ORACLE 错误 604:递归SQL级别1出现错误