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;
分享到:
相关推荐
final、finally、finalize三者区别:final用于声明常量,finally用在try-catch-finally语句中表示必须执行的代码块,finalize是Object类的一个方法,垃圾回收器在销毁对象之前会调用它。 Io流的层次结构:Java中Io...
解决这个问题的方法是在变量声明时就给它一个默认值,或者在if语句之外提供一个else分支来初始化`rslt`。 基础知识包括但不限于语法、数据结构、算法、面向对象设计原则等。理解并熟练掌握这些基础概念,可以帮助...
在`try-catch-finally`结构中,`System.exit()`的调用会在程序退出前立即执行,导致`finally`块中的代码不会被执行。这是为了强调`finally`块并非绝对不可跳过的规则。 ### 十二、异常处理结构的顺序 `try`块必须...
书中内容以实战为导向,所有内容均来自于笔者多年实践经验的总结和对新知识的拓展,同时也针对运维人员、dba等相关工作者会遇到的有代表性的疑难问题给出了实用的情景模拟,并给出了解决方案。不论你目前有没有遇到...
有的用户登录后就长时间空闲,有可能导致安全上的问题,通过打开 /etc/profile 中 TMOUT 注释,将在设置的时间到达后自动logout用户 例如: export TMOUT=120 那么, 用户两分钟没有击键,将自动logout //AIX系统中如何...