在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功能的元数据
答案 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,列返回类型名称= NUMBER
目录名=,模式名=,表名=,列名= DATA_TYPE,列标签= DATA_TYPE,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUMBER
目录名称=,架构名称=,表格名称=,列名称= TYPE_NAME,列标签= TYPE_NAME,列数据类型= 12,列类名称= java.lang.String,列返回类型名称= VARCHAR2
目录名=,模式名=,表名=,列名= PRECISION,列标签= PRECISION,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUMBER
目录名=,模式名=,表名=,列名=长度,列标签=长度,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUMBER
目录名=,模式名称=,表名=,列名= SCALE,列标签= SCALE,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUMBER
目录名=,模式名=,表名=,列名= RADIX,列标签= RADIX,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUMBER
目录名=,模式名=,表名=,列名= NULLABLE,列标签= NULLABLE,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUMBER
目录名称=,架构名称=,表格名称=,列名称=备注,列标签=备注,列数据类型= 12,列类名称= java.lang.String,列返回类型名称= VARCHAR2
目录名=,模式名=,表名=,列名= SEQUENCE,列标签= SEQUENCE,列数据类型= 2,列类名= java.math.BigDecimal,列返回类型名称= NUMBER
目录名称=,架构名称=,表格名称=,列名称= 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");