ps.registerOutParameter(4,OracleTypes.CURSOR);
这是一个游标类型,
但是p_out OUT array_abc 是一个PL/SQL表变量(数组类型),
我想是不是类型不同而造成的?

解决方案 »

  1.   

    我现在用的是nested table类型,在asktom网站上提到支持的,不过给出的连接是失效了
      

  2.   

    ps.execute();  //这句话报错
    改为ps.executeUpdate(sql);试试看
      

  3.   

    能部分的解决这个问题,但我现在只能从oracle里自定义的数组里面取出数据,二维ResultSet还不行,主要原因是相应的package不知道怎么写,大致的代码如下:
                cs = con.prepareCall("{? = call PKG#URTN2_FBA2704.FN#GetPartBoat3(?, ?)}");             oracle.sql.ArrayDescriptor desc = oracle.sql.ArrayDescriptor.createDescriptor(
                        "PKG#FBA2704.TBL_BOAT_PART", con);
                 java.sql.Date[] arrFmAndTo = {java.sql.Date.valueOf("2005-04-04"),
                                             java.sql.Date.valueOf("2005-04-10"),};
                 oracle.sql.ARRAY oraArr = new oracle.sql.ARRAY(desc, con, arrFmAndTo);
                 ((oracle.jdbc.driver.OracleCallableStatement)cs).setARRAY(2, oraArr);            cs.registerOutParameter(1, oracle.jdbc.OracleTypes.ARRAY,
                                        "TYP#ARR_FBA2704");
                cs.setInt(2, 5);
                cs.setInt(3, 10);
                cs.execute();
                //rs = (ResultSet)cs.getObject(1);
                oracle.sql.ARRAY array = ((oracle.jdbc.driver.
                                           OracleCallableStatement) cs).getARRAY(1);
                BigDecimal[] arrRs = (BigDecimal[]) array.getArray();
      

  4.   

    上面的TYP#ARR_FBA2704是在Oracle里面自定义的数组类型:
    CREATE OR REPLACE TYPE TYP#ARR_FBA2704 IS TABLE OF NUMBER(14, 0);但是当我尝试返回记录集的时候遇到了困难
      

  5.   

    这段代码也是只提到一维的数组:import java.sql.*;
    import oracle.jdbc.driver.*;
    import oracle.sql.*;class Array
    {public static void main(String args[]) throws Exception
    { DriverManager.registerDriver(new 
    oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection
               ("jdbc:oracle:thin:@aria:1521:ora8i", "scott", "tiger"); OracleCallableStatement stmt = 
    (OracleCallableStatement)conn.prepareCall
                      ( "begin ? := getSimpleArray; end;" ); // The name we use below, SIMPLEARRAY, matches the name of 
    our 
     // type we defined in SQL above
     stmt.registerOutParameter( 1, OracleTypes.ARRAY, 
    "SIMPLEARRAY" );
     stmt.executeUpdate(); // Now we can get the array object back and print out some 
    meta data about it
     ARRAY simpleArray = stmt.getARRAY(1); System.out.println ("Array is of type " +
                simpleArray.getSQLTypeName()); System.out.println ("Array element is of type code " +
                simpleArray.getBaseType()); System.out.println ("Array is of length " +
                simpleArray.length()); // Lastly, we'll print out the entire contents of our array
     String[] values = (String[])simpleArray.getArray(); for( int i = 0; i < values.length; i++ )
        System.out.println( "row " + i + " = '" + values[i] + 
    "'" ); stmt.close();
     conn.close();
    }
    }
      

  6.   

    怎么我调用自定义的数组类型时,总是要报错:
    javax.servlet.ServletException: 无效的名称模式: 
    是怎么回事?