2016-04-19 11 views
1

this questionから、JDBCからOracle Table Typesを取得/書き込みする方法については、直接タイプ・メタデータまたはタイプの名前のいずれかを取り出すことができますOracleドライバのStructDescriptorと組み合わせて必要なデータを取得してください)。具体的にJDBCからOracle ADT/User Typeメタデータを取得する

、この手順を与えられた:

CREATE OR REPLACE PROCEDURE andrew_test (
     p_in_num_param   IN NUMBER 
    , p_in_char_param   IN VARCHAR2 
    , p_in_date_param   IN DATE 
    , p_in_adt_param   IN sw_ty_number_array 
    , p_out_num_param   OUT NUMBER 
    , p_out_char_param  OUT VARCHAR2 
    , p_out_date_param  OUT DATE 
    , p_out_adt_param   OUT sw_ty_number_array 
    , p_inout_num_param IN OUT NUMBER 
    , p_inout_char_param IN OUT VARCHAR2 
    , p_inout_date_param IN OUT DATE 
    , p_inout_adt_param IN OUT sw_ty_number_array 
) AS 
BEGIN 
    NULL; 
END; 
/

そして、このJavaコード(ParameterMetadataは単なるPOJOであると仮定):

Connection conn = dataSource.getConnection(); 
DatabaseMetaData metadata = conn.getMetaData(); 
rs = metadata.getProcedureColumns(packageName, this.schemaName, procedureName, null); 

while(rs.next()) { 
    ProcedureParameter param = new ProcedureParameter(rs.getString("COLUMN_NAME"), rs.getInt("DATA_TYPE"), rs.getInt("COLUMN_TYPE"), rs.getString("TYPE_NAME")); 
    System.out.println(param); 
} 

は、SQLタイプID 1111より有意義なもの( "その他" を取得)とタイプ名 "TABLE"(sw_ty_number_arrayが好ましい)を使用してください。

ProcedureParameter [parameterName=P_IN_NUM_PARAM, sqlType=3, parameterType=1, parameterTypeName=NUMBER] 
ProcedureParameter [parameterName=P_IN_CHAR_PARAM, sqlType=12, parameterType=1, parameterTypeName=VARCHAR2] 
ProcedureParameter [parameterName=P_IN_DATE_PARAM, sqlType=93, parameterType=1, parameterTypeName=DATE] 
ProcedureParameter [parameterName=P_IN_ADT_PARAM, sqlType=1111, parameterType=1, parameterTypeName=TABLE] 
ProcedureParameter [parameterName=P_OUT_NUM_PARAM, sqlType=3, parameterType=4, parameterTypeName=NUMBER] 
ProcedureParameter [parameterName=P_OUT_CHAR_PARAM, sqlType=12, parameterType=4, parameterTypeName=VARCHAR2] 
ProcedureParameter [parameterName=P_OUT_DATE_PARAM, sqlType=93, parameterType=4, parameterTypeName=DATE] 
ProcedureParameter [parameterName=P_OUT_ADT_PARAM, sqlType=1111, parameterType=4, parameterTypeName=TABLE] 
ProcedureParameter [parameterName=P_INOUT_NUM_PARAM, sqlType=3, parameterType=2, parameterTypeName=NUMBER] 
ProcedureParameter [parameterName=P_INOUT_CHAR_PARAM, sqlType=12, parameterType=2, parameterTypeName=VARCHAR2] 
ProcedureParameter [parameterName=P_INOUT_DATE_PARAM, sqlType=93, parameterType=2, parameterTypeName=DATE] 
ProcedureParameter [parameterName=P_INOUT_ADT_PARAM, sqlType=1111, parameterType=2, parameterTypeName=TABLE] 

答えて

0

今のところ、解決策を見つけることができませんでした。

ビューuser_argumentsを照会して手動でデータを取得することもできます。

関連する問題