你的写法错了:
stat = con.prepareCall("call mypackage.getarray(?,?)");
改为:
stat = con.prepareCall("{call mypackage.getarray(?,?)}");

解决方案 »

  1.   

    你得stat是那个对象的实列
    应该用CallableStatement
      

  2.   

    你的stat是那个对象的实列
    应该用CallableStatement
      

  3.   

    Connection con;
        CallableStatement stat;
        String execProc = "{call mypackage.getarray(?,?)}";    try{
          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
          con = DriverManager.getConnection("jdbc:odbc:xgLove","xgtest","xgtest");      stat = con.prepareCall(execProc);
          stat.registerOutParameter(1, java.sql.Types.VARCHAR);
          stat.registerOutParameter(2, java.sql.Types.NUMERIC);
          stat.execute();      Array a1 = stat.getArray(1);
          Array a2 = stat.getArray(2);
          ResultSet rs1 = a1.getResultSet();
          ResultSet rs2 = a2.getResultSet();
          while(rs1.next()){
            rs2.next();
            System.out.println(rs1.getString(1));
            System.out.println(rs2.getInt(1));
          }
          rs1.close();
          rs2.close();
          stat.close();
          con.close();
        }
        catch(Exception e){
          e.printStackTrace();
        }执行:
    java.sql.SQLException: [Oracle][ODBC][Ora]ORA-06550: 第 1 行, 第 7 列: 
    PLS-00306: 调用 'GETARRAY' 时参数个数或类型错误
    ORA-06550: 第 1 行, 第 7 列: 
    PLS-00306: 调用 'GETARRAY' 时参数个数或类型错误
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored
      

  4.   

    包定义:
    CREATE OR REPLACE  PACKAGE "XGTEST"."MYPACKAGE"  authid
        current_user as
      type mobileno is table of varchar2(20);
      type usid is table of int;
      procedure getarray(mobno out mobileno,uer out usid);
    end;
      

  5.   

    java.sql.CallableStatement stat = con.prepareCall("{call mypackage.getarray(?,?)}");
    stat.registerOutParameter(1, java.sql.Types.VARCHAR);
    stat.registerOutParameter(2, java.sql.Types.NUMERIC);
    int i=stat.executeUpdate();
      

  6.   

    改成:executeUpdate还是同样的错!!!
      

  7.   

    你写的是getarray(?,?)
    是不是应该是:getArray(?,?)
    你确认存储过程的参数是两个吗?
    ^_^
      

  8.   

    stat.toString(1, java.sql.Types.VARCHAR);
    stat.toInt(2, java.sql.Types.NUMERIC);
    试试把这俩个改改
      

  9.   

    我的问题还没解决!!!!
    重新描述一下:
        我想从Oracle的存储过程返回结果集(不是游标),
    定义了一个包(包括存储过程),如下:
    CREATE OR REPLACE  PACKAGE MYPACKAGE authid
        current_user as
      type mobileno is table of varchar2(20);
      type usid is table of int;
      procedure getarray(mobno out mobileno,uer out usid);
    end;然后调用时提示:
    java.sql.SQLException: [Oracle][ODBC][Ora]ORA-06550: 第 1 行, 第 7 列: 
    PLS-00306: 调用 'GETARRAY' 时参数个数或类型错误
    ORA-06550: 第 1 行, 第 7 列: 
    PLS-00306: 调用 'GETARRAY' 时参数个数或类型错误
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored
    修改这两句:
          stat.registerOutParameter(1, java.sql.Types.VARCHAR);
          stat.registerOutParameter(2, java.sql.Types.NUMERIC);
    没有效果。
    而如果存储过程返回的是游标,不调用registerOutParameter也可以成功。
    有没有人这样用过!!!!