在oracle中获取元数据功能

时间:2014-06-13 04:15:53

标签: java oracle jdbc database-metadata

在oracle中,我可以获取存储过程的元数据:

 DatabaseMetaData dbMetaData = conn.getMetaData();
 ResultSet rs = dbMetaData.getProcedureColumns(conn.getCatalog(),
                          null,
                          "procedureNamePattern",
                          "columnNamePattern");

  while(rs.next()) {
      // get stored procedure metadata
      String procedureCatalog     = rs.getString(1);
      String procedureSchema      = rs.getString(2);
      String procedureName        = rs.getString(3);
      String columnName           = rs.getString(4);
      short  columnReturn         = rs.getShort(5);
      int    columnDataType       = rs.getInt(6);
      String columnReturnTypeName = rs.getString(7);
  }

但没有数据返回功能:

DatabaseMetaData.getFunctionColumns()

如何获取oracle功能的元数据

2 个答案:

答案 0 :(得分:1)

出了点问题,Elliott Frisch

它总是为不同的商店/功能返回相同的结果:

目录名=,模式名=,表名=,列名= PROCEDURE_CAT,列标签= PROCEDURE_CAT,列数据类型= 12,列类名= java.lang.String,列返回类型名称= VARCHAR2

目录名=,模式名=,表名=,列名= PROCEDURE_SCHEM,列标签= PROCEDURE_SCHEM,列数据类型= 12,列类名= java.lang.String,列返回类型名称= VARCHAR2

目录名称=,架构名称=,表格名称=,列名称= PROCEDURE_NAME,列标签= PROCEDURE_NAME,列数据类型= 12,列类名称= java.lang.String,列返回类型名称= VARCHAR2

目录名称=,架构名称=,表格名称=,列名称= COLUMN_NAME,列标签= COLUMN_NAME,列数据类型= 12,列类名称= java.lang.String,列返回类型名称= VARCHAR2

目录名=,模式名=,表名=,列名= COLUMN_TYPE,列标签= COLUMN_TYPE,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUM​​BER

目录名=,模式名=,表名=,列名= DATA_TYPE,列标签= DATA_TYPE,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUM​​BER

目录名称=,架构名称=,表格名称=,列名称= TYPE_NAME,列标签= TYPE_NAME,列数据类型= 12,列类名称= java.lang.String,列返回类型名称= VARCHAR2

目录名=,模式名=,表名=,列名= PRECISION,列标签= PRECISION,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUM​​BER

目录名=,模式名=,表名=,列名=长度,列标签=长度,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUM​​BER

目录名=,模式名称=,表名=,列名= SCALE,列标签= SCALE,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUM​​BER

目录名=,模式名=,表名=,列名= RADIX,列标签= RADIX,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUM​​BER

目录名=,模式名=,表名=,列名= NULLABLE,列标签= NULLABLE,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUM​​BER

目录名称=,架构名称=,表格名称=,列名称=备注,列标签=备注,列数据类型= 12,列类名称= java.lang.String,列返回类型名称= VARCHAR2

目录名=,模式名=,表名=,列名= SEQUENCE,列标签= SEQUENCE,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUM​​BER

目录名称=,架构名称=,表格名称=,列名称= OVERLOAD,列标签= OVERLOAD,列数据类型= 12,列类名称= java.lang.String,列返回类型名称= VARCHAR2

目录名称=,架构名称=,表格名称=,列名称= DEFAULT_VALUE,列标签= DEFAULT_VALUE,列数据类型= -1,列类名称= java.lang.String,列返回类型名称= LONG

答案 1 :(得分:1)

这不好,但我为我工作:

select ARGUMENT_NAME, DATA_TYPE, IN_OUT from SYS.ALL_ARGUMENTS where object_name = upper(?) order by position as

然后在java中,我可以得到

String columnName = rs.getString("ARGUMENT_NAME");
if (index == 0) {
    columnName = RETURN_VALUE;
}
String columnDataTypeInString = rs.getString("DATA_TYPE");
String columnReturnInString = rs.getString("IN_OUT");