ネストされたテーブルが OUT パラメータから受信される方法は、テーブルがどのようにネストされているかによって異なります。単純な配列型を考慮してください。
オブジェクトタイプ
CREATE OR REPLACE
TYPE HR.TNAME
AS
OBJECT( NO1 NUMBER,
NAME VARCHAR2(10)
);
テーブルタイプ
CREATE OR REPLACE
TYPE HR.ITYPE_CUSTOM
IS TABLE OF tname;
手順
CREATE OR REPLACE PROCEDURE HR.p_schema_level_out(IN1 IN varchar2,p_det OUT itype_custom)
AS
lc_var itype_custom := itype_custom();
BEGIN
lc_var.extend;
lc_var(1) := TNAME(NO1 => 1,NAME => 'TRAIL1');
lc_var(1).no1 := 1;
lc_var(1).name := 'qwe';
p_det:= lc_var;
END;
/
カスタム配列型を返す上記の手順は、次のように処理できます。
try {
stmt = con.createStatement();
// -----------------------------------------------------
// Call PL/SQL Procedure
// -----------------------------------------------------
String s1 = "begin p_schema_level_out(?,?); end;";
cstmt = (OracleCallableStatement) con.prepareCall(s1);
cstmt.setString(1, "something");
cstmt.registerOutParameter(2, Types.ARRAY, "ITYPE_CUSTOM");
cstmt.execute();
Object[] data = (Object[]) ((Array) cstmt.getObject(2)).getArray();
for (Object tmp : data) {
STRUCT row = (STRUCT) tmp;
for (Object attribute : row.getAttributes()) {
System.out.println(attribute);
}
cstmt.close();
stmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
これは、ネストされたテーブルタイプを投稿できる場合、テーブルタイプを受け取る方法のベースとして機能します