【问题标题】:Retrieving Oracle ADT / User Type metadata from JDBC从 JDBC 检索 Oracle ADT/用户类型元数据
【发布时间】:2016-08-11 07:36:33
【问题描述】:

this question 开始,关于如何从 JDBC 检索/写入 Oracle 表类型,是否可以直接检索类型元数据,或者只检索类型的名称(然后可以与 Oracle 驱动程序的 @ 987654322@获取所需数据)?

具体来说,给定这个过程:

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(“Other”)和类型名称“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]

【问题讨论】:

    标签: oracle stored-procedures jdbc out-parameters


    【解决方案1】:

    目前,我们无法找到可行的解决方案。

    当前的替代方法是查询视图user_arguments 并手动检索数据。

    【讨论】:

      猜你喜欢
      • 2022-11-21
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多