我刚刚学,请大家不要笑话,问题如下:
create or replace procedure class_course
iscursor   cur_a   is select * from yxy_class;
cr   yxy_class%ROWTYPE;
begin
IF NOT cur_a%ISOPEN
THEN
    OPEN cur_a;
END IF;  while cur_a%found
    loop
    fetch   cur_a   into   cr;   
    end   loop;   
close   cur_a; end class_course;请问如果我把select * from yxy_class; 改成select aa from yxy_class这样就和cr类型的列对不上了,应该怎么处理,还有就是,如果我要用java调用的话
proc.execute();

rs = (ResultSet)proc.getObject(3);
但我如果不知道有多少列的话,getObject(3)这个方法应该怎么写呢?
希望大家帮助小弟!!

解决方案 »

  1.   

    cr  yxy_class.aa%TYPE; 存储过程返回多少列不知道,怎么可能,你应该知道输入输出参数才能调用的吧
      

  2.   

    the answer is:
    create or replace procedure class_course is  cursor cur_a is
        select aa from yxy_class;
      cr yxy_class.aa%TYPE;
    begin  IF NOT cur_a%ISOPEN THEN
        OPEN cur_a;
      END IF;  while cur_a%found loop
        fetch cur_a
          into cr;
      end loop;
      close cur_a;end class_course;
      

  3.   

    谢谢chensi05  ,我可能是动态调用存储过程,,按你上面说的,如果我这个cr里想要两列,那应该怎么定义呢
      

  4.   

    Compilation errors for PROCEDURE TPL.CLASS_COURSEError: PLS-00310: 使用 %ROWTYPE 属性时,'YXY_CLASS.NIANJI' 必须命名表,游标或游标变量
    Line: 5
    Text: cr   yxy_class.nianji%ROWTYPE;Error: PL/SQL: Item ignored
    Line: 5
    Text: cr   yxy_class.nianji%ROWTYPE;Error: PLS-00320: 此表达式的类型说明不完整或格式不正确
    Line: 16
    Text: fetch   cur_a   into   cr;Error: PL/SQL: SQL Statement ignored
    Line: 16
    Text: fetch   cur_a   into   cr;
      

  5.   

    谢谢上面两位,可以通过了,但是在java里还是取不出来,出现"无效的列索引"
    proc = conn.prepareCall("{ call class_course() }");
    proc.execute();

    rs = (ResultSet)proc.getObject(1);
    while (rs.next()) {
          
       System.out.println("年级是="+rs.getObject("nianji") );
          
    }
    这又是为什么呢?