VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 19|回复: 3

oracle自定义对象的运用问题

[复制链接]

1

主题

3

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2020-3-4 08:30:01 | 显示全部楼层 |阅读模式
在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

这是怎么回事呢?
回复

使用道具 举报

0

主题

70

帖子

49

积分

新手上路

Rank: 1

积分
49
发表于 2020-5-16 22:00:01 | 显示全部楼层
procedure testSS( nsrs out nsrlist ) is
只是out参数啊,in参数呢?

你的java代码如何in?

proc = conn.prepareCall({ call TESTVARRAY.testSS(?) });
回复

使用道具 举报

1

主题

3

帖子

4

积分

新手上路

Rank: 1

积分
4
 楼主| 发表于 2020-6-24 19:30:01 | 显示全部楼层
可以不带参数的,调用后,返回的结果应该是:
a1
a2
a3
但现在的结果变成了:
0x6131
0x6132
0x6133
回复

使用道具 举报

1

主题

3

帖子

4

积分

新手上路

Rank: 1

积分
4
 楼主| 发表于 2020-8-19 09:00:02 | 显示全部楼层
问题还没解决,目前用临时表来解决这个问题,即把查询出来的结果insert到临时表,然后查询临时表,返回一个游标,这样在程序端就不会乱码了,唯一一个不好就是性能。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2020|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表