ORACLE存储过程:
CREATE OR REPLACE PROCEDURE "SCOTT"."TESTPROC"(CUR OUT SYS_REFCURSOR)
AS
 BEGIN
   OPEN CUR FOR SELECT * FROM TEST_TABLE;
 END;
/JAVA代码:
  String sql="{CALL TESTPROC(?)}"
  CallableStatement cstm=conn.preparedStatement();
  cstm.regersitOutPagameter(1,oracle.jdbc.OracleTypes.CURSOR);
  cstm.execute();
  ResultSet rs=(ResultSet)cstm.getObject(1);
  while(rs.next){
      System.out.println(rs.getString("NAME"));
  }
问题描述: 
  TEST_TABLE中记录数是0;表结构是:ID NUMBER(10),NAME VARCHAR2(100)
抛出异常:CURSOR IS CLOSED!
原因是表中记录数是0,现在想不在存储过程中计算记录数来判断是否有记录,而是想在JAVA代码中通过某个方法来判断游标是否打开,可否?!

解决方案 »

  1.   

    你这个非要这么判断 那么能不能union一行记录  java取数据的时候从第2行开始取?
    我想会不会是oracle没的cursor没记录集的时候自动关闭游标、
      

  2.   

    在过程里判断很简单呀CREATE OR REPLACE PROCEDURE TESTPROC(CUR OUT SYS_REFCURSOR)
    AS
        default_c SYS_REFCURSOR;
    BEGIN

      OPEN CUR FOR SELECT * FROM AA;
      if CUR%rowcount = 0 then
         CUR:=default_c;
      end if;

    END;定义一个默认空游标,没数据就返回它呗
      

  3.   

    就算是查不到数据,java代码也不会报错的,你有rs.next呀,完全没问题。我们开发一直都是这样用的。
    问题应该出在存储过程,你的存储过程不是这么简单吧,里面是不是有临时表呀。