1

我有以下类型:

create or replace TYPE mytimestamp AS VARRAY(300) OF TIMESTAMP(6);
create or replace TYPE trade_history_dts_array AS VARRAY(300) OF   mytimestamp;

这些类型在存储过程中以这种方式使用:

trade_history_dts tradehistorydtsarray ;

FOR i IN 1..20
loop
  trade_history_dts(i) := mytimestamp();
    LOOP   
      trade_history_dts(i).extend();
      FETCH trade_history_cursor INTO 
      trade_history_dts(i)(j),
      dbms_output.put_line(trade_history_dts(i)(j)); 

      j := j+1;
      exit when trade_history_cursor%notfound;
    END LOOP;
    j:=1;
end loop;

存储过程经过测试,我可以得到正确的结果:

贸易信息 1

trade_history_dts(1)(1)17-OCT-05 03.49.57.000000 PM
trade_history_dts(1)(2)17-OCT-05 03.49.58.000000 PM

贸易信息 2

trade_history_dts(2)(1)27-JUN-05 09.02.59.000000 AM
trade_history_dts(2)(2)27-JUN-05 09.02.59.000000 AM
trade_history_dts(2)(3)27-JUN-05 09.03.01.000000 AM

贸易信息 3

trade_history_dts(3)(1)09-FEB-06 09.31.03.000000 AM
trade_history_dts(3)(2)09-FEB-06 09.31.05.000000 AM

....

现在我想在 java 中得到这个结果,并将其转换为二维数组。

我尝试了以下方法:

Timestamp[][] trade_history_dts = (Timestamp[][])trade_history_dts_arr.getArray();

但它不起作用。有人知道如何在java中将其转换为二维数组吗?谢谢!

4

1 回答 1

4

您采用的方法将不起作用,因为 JDBC 本身不支持 Oracle 的集合类型。您需要处理 Oracle JDBC 驱动程序中包含的类型对象,以便以您希望的方式访问结果集的内容。这将涉及将ResultSet对象转换为 ,OracleResultSet以便可以通过元素的实例访问集合的内部oracle.sql.ARRAY元素。

您还可以使用该方法从 ResultSet 中读取一个对象getObject,然后将其转换为oracle.sql.ARRAY代表集合的实例。有关此机制的详细信息,可以在Oracle Database JDBC Developer's Guide and Reference中找到。

此外,您需要解析结果集中的每个元素,并以类似的方式处理它们,因为您将返回一个多级集合。这方面的详细信息在同一指南的单独部分中提供。

于 2011-06-01T03:28:47.793 回答