在oracle中定义了一个列表的类型nsrlist:
create or replace type nsrlist is varray(2000) of varchar2(20)存储过程body如下:
create or replace package body TESTVARRAY is 
procedure testSS( nsrs out nsrlist ) is
   nsrarray nsrlist := nsrlist('a1','a2','a3');
   begin 
      nsrs := nsrarray;
   end;
begin
   null;
end TESTVARRAY;在java代码中是这样调用的:
Connection conn = session.connection();
CallableStatement proc = null;
try
{
   proc = conn.prepareCall({ call TESTVARRAY.testSS(?) });
   proc.registerOutParameter(1, OracleTypes.ARRAY, "NSRLIST");
   proc.execute();
   ResultSet rs = null;
   Array simpleArray = proc.getArray(1);
   rs = simpleArray.getResultSet();
   while(rs.next())
   {
      System.out.println(rs.getString(2));
   }
}catch(SQLException e)
{
   e.printStackTrace();
}控制台输出的结果变成了
0x6131
0x6132
0x6133这是怎么回事呢?

解决方案 »

  1.   

    procedure testSS( nsrs out nsrlist ) is
    只是out参数啊,in参数呢?你的java代码如何in?proc = conn.prepareCall({ call TESTVARRAY.testSS(?) });
      

  2.   

    可以不带参数的,调用后,返回的结果应该是:
    a1
    a2
    a3
    但现在的结果变成了:
    0x6131
    0x6132
    0x6133
      

  3.   

    问题还没解决,目前用临时表来解决这个问题,即把查询出来的结果insert到临时表,然后查询临时表,返回一个游标,这样在程序端就不会乱码了,唯一一个不好就是性能。