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 で取得し、2 次元配列に変換したいと考えています。

私は次のことを試しました:

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

しかし、それは機能しません。Javaで2次元配列に変換する方法を知っている人はいますか? ありがとうございました!

4

1 に答える 1

4

JDBC 自体は Oracle のコレクション型をサポートしていないため、採用したアプローチは機能しません。必要な方法で結果セットの内容にアクセスするには、Oracle JDBC ドライバーに含まれるタイプのオブジェクトで作業する必要があります。これには、要素のインスタンスを介してコレクションの内部要素にアクセスできるように、ResultSetオブジェクトを にキャストすることが含まれます。OracleResultSetoracle.sql.ARRAY

メソッドを使用して ResultSet からオブジェクトを読み取り、それをコレクションを表すインスタンスにgetObjectキャストすることもできます。oracle.sql.ARRAYこのメカニズムの詳細は、『Oracle Database JDBC Developer's Guide and Reference』に記載されています。

さらに、複数レベルのコレクションを返すため、結果セット内の各要素を解析し、同様の方法で処理する必要があります。この詳細については、同じガイドの別のセクションに記載されています。

于 2011-06-01T03:28:47.793 に答える