2012-10-16 09:50:34,575 [Thread-3] INFO [com.tg.thread.util.LoggerUtil] - java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01000: 超出打开游标的最大数
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01000: 超出打开游标的最大数
ORA-01000: 超出打开游标的最大数
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oopen.receive(Oopen.java:120)
at oracle.jdbc.ttc7.TTC7Protocol.open(TTC7Protocol.java:586)
at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:385)
at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:413)
at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedStatement.java:119)
at oracle.jdbc.driver.OracleCallableStatement.<init>(OracleCallableStatement.java:77)
at oracle.jdbc.driver.OracleCallableStatement.<init>(OracleCallableStatement.java:48)
at oracle.jdbc.driver.OracleConnection.privatePrepareCall(OracleConnection.java:1134)
at oracle.jdbc.driver.OracleConnection.prepareCall(OracleConnection.java:988)
at sun.reflect.GeneratedMethodAccessor108.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:592)
at org.hibernate.jdbc.BorrowedConnectionProxy.invoke(BorrowedConnectionProxy.java:74)
at $Proxy1.prepareCall(Unknown Source)
at com.tg.thread.busi.period.dao.CmPeriodInfoDaoImpl.execProce_strpPeriod(CmPeriodInfoDaoImpl.java:40)
at com.tg.thread.busi.period.service.PeriodService.proess_StopPeriod(PeriodService.java:37)
at com.tg.thread.test.TestThread.run(TestThread.java:62)
2012-10-16 09:50:34,575 [Thread-3] INFO [com.tg.thread.util.LoggerUtil] - PeriodService--> 期次过期过程 执行失败 数据库异常,过程返回null
2012-10-16 09:50:34,575 [Thread-3] INFO [com.tg.thread.util.LoggerUtil] - 正在执行的查询hql: from CmPeriodInfoBean t where (t.istate=2 or t.istate=3) and rownum<15 order by t.id desc
2012-10-16 09:50:34,576 [Thread-3] INFO [com.tg.thread.util.LoggerUtil] - org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2235)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
at org.hibernate.loader.Loader.list(Loader.java:2124)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1149)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at com.tg.thread.base.BaseDaoImpl.findObjects(BaseDaoImpl.java:92)
at com.tg.thread.busi.period.service.PeriodService.getNoAwardsPeriods(PeriodService.java:204)
at com.tg.thread.test.TestThread.run(TestThread.java:64)
Caused by: java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01000: 超出打开游标的最大数
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01000: 超出打开游标的最大数
ORA-01000: 超出打开游标的最大数
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oopen.receive(Oopen.java:120)
at oracle.jdbc.ttc7.TTC7Protocol.open(TTC7Protocol.java:586)
at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:385)
at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:413)
at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedStatement.java:119)
at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedStatement.java:92)
at oracle.jdbc.driver.OracleConnection.privatePrepareStatement(OracleConnection.java:950)
at oracle.jdbc.driver.OracleConnection.prepareStatement(OracleConnection.java:802)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:534)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:452)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1577)
at org.hibernate.loader.Loader.doQuery(Loader.java:696)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:2232)
... 10 more
--下面是存储过程的代码
create or replace procedure pro_stopPeriod--期次过期截至
(
po_ErrCode Out Int, --错误代码
po_ErrDesc Out varchar2, --错误描述
po_orderAccoutSum Out Int --重置订单总数
)
is
v_count int;
v_period VARCHAR2(20);
v_lotterycode VARCHAR2(20);
cursor emp_cursor is
select t.cperiodid,t.clotterycode from cm_period_info t
where t.cendtime <to_char(sysdate,'yyyy-MM-dd HH:mm:ss') and (t.ISTATE=0 or t.ISTATE=1);
begin
po_ErrCode :=9999;
po_ErrDesc :='未知异常';
po_orderAccoutSum:=0;
OPEN emp_cursor;
IF emp_cursor%ISOPEN THEN
LOOP
FETCH emp_cursor INTO v_period,v_lotterycode;
EXIT WHEN emp_cursor%NOTFOUND;
--处理代购0表示未处理; 1-收单成功 2-收单失败
select count(*) into v_count from cm_orderinfo t where t.cperiodid=v_period and t.clotterycode=v_lotterycode
and (t.tradestate=1 or t.tradestate=2 );
if v_count>0 then
update cm_orderinfo t1 set t1.TRADESTATE=11 where t1.cperiodid=v_period and t1.clotterycode=v_lotterycode;
po_orderAccoutSum:=po_orderAccoutSum+v_count;
----缺少退款流程--单独线程处理
end if;
--处理合买
select count(*) into v_count from cm_hm_info t where t.ILEAVINGNUM>0
and t.ICPERIODS=v_period and t.CLOTTERYCODE=v_lotterycode and (t.ISTATE=0 or t.ISTATE=1);
if v_count>0 then
update cm_hm_info t set t.istate=5 where ( t.ILEAVINGNUM>0 or t.istate=0 or t.istate=1 ) and t.ICPERIODS=v_period and t.CLOTTERYCODE=v_lotterycode;
po_orderAccoutSum:=po_orderAccoutSum+v_count;
---缺少退款流程--单独线程处理
end if;
end loop;
CLOSE emp_cursor;
update cm_period_info t set t.istate=2 where t.cendtime <to_char(sysdate,'yyyy-MM-dd HH:mm:ss');
po_ErrCode :=0;
po_ErrDesc :='期次停止并将相关订单修改为[出票失败]完成';
commit;
else
po_ErrCode :=2001;
po_ErrDesc :='游标未打开';
commit;
end if;
/*
LOOP
FETCH emp_cursor INTO v_ename;
EXIT WHEN emp_cursor%NOTFOUND;
update cm_orderinfo t1 set t1.TRADESTATE=5 where t1.cperiodid=emp_cursor%cperiodid
and t1.clotterycode=emp_cursor%clotterycode;
po_orderAccoutSum:=emp_cursor%ROWCOUNT;
END LOOP;
end if;
FOR Emp_record IN emp_cursor LOOP
DBMS_OUTPUT.PUT_LINE(Emp_record.cperiodid|| Emp_record.clotterycode);
END LOOP;
*/
Exception
When Others Then
po_ErrCode :=9999;
po_ErrDesc := '未知异常' ;
IF emp_cursor%ISOPEN THEN
CLOSE emp_cursor;
END IF;
rollback;
end pro_stopPeriod;
分享到:
相关推荐
在Java编程中,Oracle存储过程的调用与标准输入(System.in)的交互可能会遇到一些问题,特别是当尝试使用System.in进行阻塞IO操作时。这个问题通常涉及到Java的多线程概念、I/O流的处理以及Oracle存储过程的执行...
默认情况下,QTimer是在主线程中运行的,其触发的槽函数也会在主线程中执行。这在很多情况下是足够的,但如果槽函数执行时间较长或者涉及到复杂的计算,可能会导致主线程被占用,影响UI的响应速度。 QThread则是一...
6. **线程安全**:虽然这个简单的定时器实现没有特别处理线程同步问题,但在`Stop`方法中尝试停止线程时,它调用了`Abort`方法,这是一个粗暴的停止方式,可能会导致未完成操作的问题。在实际开发中,推荐使用更优雅...
标题中的“多个线程到达后才能执行某个任务,并且只能执行一次”指的是在多线程环境下,需要确保一个任务在所有等待线程都到达特定条件后才开始执行,并且这个任务在整个程序运行过程中只被执行一次。这通常涉及到...
多线程并行执行是指在同一个程序中同时运行多个线程,每个线程负责不同的任务,以实现任务的并发执行。这种技术可以充分利用多核处理器的优势,将CPU的计算能力最大化,从而提高程序的运行效率。在Java中,可以通过...
标题所提及的场景是一个Java多线程环境,涉及到两个线程——ThreadA和ThreadB,它们分别执行Service类中的methodA()和methodB()方法。这两个方法分别同步在不同的对象上,即object1和object2。在这种情况下,线程A在...
在Python的GUI编程中,PyQt5是一个广泛使用的库,它提供了丰富的功能,包括创建复杂的用户界面和处理多线程任务。本示例主要探讨如何在PyQt5中实现多线程的执行与停止,并通过进度条进行可视化展示。下面我们将深入...
Oracle数据库在启动过程中可能会遇到各种报错,这些错误通常是由于配置问题、资源限制或是系统级设置不当导致的。本文将详细解析ORACLE启动报错的常见问题及其解决方案。 首先,针对ORA-12500:“TNS:监听程序无法...
在C#编程中,线程管理是一个重要的概念,特别是在多任务并行处理的场景下。在某些情况下,我们可能需要限制同一时间并发执行的线程数量,以避免资源过度消耗或确保程序的稳定性。本篇将详细介绍如何使用C#中的Mutex...
- 在易语言中,可以使用“创建线程”命令来创建一个新的线程,该命令会返回一个线程ID,这个ID用于后续的线程管理和操作。 - 当线程执行完毕或被强制中断时,系统会自动清理线程资源。但若需手动结束线程,可使用...
在Java编程中,控制程序执行超时是一项重要的任务,特别是在多线程环境下,我们可能需要确保某个任务不会无限制地运行下去,导致资源耗尽。本文将深入探讨如何使用Java的线程机制来实现程序执行的超时控制,同时也会...
多线程是指在一个进程中同时存在两个或更多的执行线程,它们共享同一内存空间,但各自有独立的执行路径。在易语言中,我们可以通过创建线程对象来启动新的线程,并通过特定的函数或子程序来控制和监视线程的状态。 ...
在本例中,可能创建了多个线程来并行执行数据库查询,每个线程负责一个或多个任务,这样可以大大提高整体处理速度。 4. **同步与线程安全**:在多线程环境中,数据共享可能会引发竞态条件和死锁问题。因此,Java...
在软件开发过程中,特别是在Windows Forms应用程序中,开发者经常需要在后台线程中执行耗时操作,并且在这些操作完成后更新用户界面(UI)。然而,直接从非UI线程访问或修改UI控件可能会导致应用程序崩溃或异常行为...
在本实验中,启动了一个线程块,且该线程块中有10个线程,这意味着我们将在GPU的一个特定区域上同时运行10个线程,共同处理一个任务。 线程块是CUDA编程中并行度的基本单位,它内部的线程可以高效地共享数据,因为...
在Windows Forms(Winform)应用程序开发中,遇到界面(UI)卡死问题通常是由于长时间运行的任务阻塞了主线程,导致UI无法响应用户交互。主线程是负责更新和绘制用户界面的,如果在这个线程上执行了耗时操作,就会...
使用Qt也已经有一段时间了,虽然使用过继承QThread重写run函数,以及继承QObject然后使用MoveToThread两种方法实现多线程,但是在QSerialPort的使用过程中,两种方法都存在一定的问题。 典型的问题: QObject: ...
Oracle数据库是一个基于网络计算的系统,它内建了对Java的支持,包括Oracle JVM(Java Virtual Machine),这使得开发者能够在数据库服务器端执行复杂的计算任务,减轻客户端的负担。Java存储过程是Oracle数据库中的...
在描述中提到的博客链接(由于实际无法访问,我们只能根据题目提供信息进行推测)可能详细解释了一个使用Java实现的多线程案例。这个案例可能涉及到线程同步、线程通信、线程池等高级主题,比如`synchronized`关键字...
Oracle 提供了一个名叫 Orakill 的工具,可以在 Windows 环境下强制 Kill 掉一个线程。Orakill 的使用方法如下:在 Dos 提示符下,输入“orakill sid thread”,其中 sid 是 Oracle 的 Sid 号,thread 是 Oracle 的...