![](/img/trans.png)
[英]Get metadata without deprecated StructDescriptor in Oracle
[英]Get metadata function in oracle
在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函數的元數據
出了點問題,Elliott Frisch
它總是為不同的商店/功能返回相同的結果:
Catalog Name =,Schema Name =,Table Name =,Column Name = PROCEDURE_CAT,Column Label = PROCEDURE_CAT,Column Data Type = 12,Column Class Name = java.lang.String,Column Return Type Name = VARCHAR2
Catalog Name =,Schema Name =,Table Name =,Column Name = PROCEDURE_SCHEM,Column Label = PROCEDURE_SCHEM,Column Data Type = 12,Column Class Name = java.lang.String,Column Return Type Name = VARCHAR2
Catalog Name =,Schema Name =,Table Name =,Column Name = PROCEDURE_NAME,Column Label = PROCEDURE_NAME,Column Data Type = 12,Column Class Name = java.lang.String,Column Return Type Name = VARCHAR2
Catalog Name =,Schema Name =,Table Name =,Column Name = COLUMN_NAME,Column Label = COLUMN_NAME,Column Data Type = 12,Column Class Name = java.lang.String,Column Return Type Name = VARCHAR2
Catalog Name =,Schema Name =,Table Name =,Column Name = COLUMN_TYPE,Column Label = COLUMN_TYPE,Column Data Type = 2,Column Class Name = java.math.BigDecimal,Column Return Type Name = NUMBER
目錄名稱=,架構名稱=,表格名稱=,列名稱= DATA_TYPE,列標簽= DATA_TYPE,列數據類型= 2,列類名稱= java.math.BigDecimal,列返回類型名稱= NUMBER
Catalog Name =,Schema Name =,Table Name =,Column Name = TYPE_NAME,Column Label = TYPE_NAME,Column Data Type = 12,Column Class Name = java.lang.String,Column Return Type Name = VARCHAR2
Catalog Name =,Schema Name =,Table Name =,Column Name = PRECISION,Column Label = PRECISION,Column Data Type = 2,Column Class Name = java.math.BigDecimal,Column Return Type Name = NUMBER
Catalog Name =,Schema Name =,Table Name =,Column Name = LENGTH,Column Label = LENGTH,Column Data Type = 2,Column Class Name = java.math.BigDecimal,Column Return Type Name = NUMBER
Catalog Name =,Schema Name =,Table Name =,Column Name = SCALE,Column Label = SCALE,Column Data Type = 2,Column Class Name = java.math.BigDecimal,Column Return Type Name = NUMBER
Catalog Name =,Schema Name =,Table Name =,Column Name = RADIX,Column Label = RADIX,Column Data Type = 2,Column Class Name = java.math.BigDecimal,Column Return Type Name = NUMBER
Catalog Name =,Schema Name =,Table Name =,Column Name = NULLABLE,Column Label = NULLABLE,Column Data Type = 2,Column Class Name = java.math.BigDecimal,Column Return Type Name = NUMBER
Catalog Name =,Schema Name =,Table Name =,Column Name = REMARKS,Column Label = REMARKS,Column Data Type = 12,Column Class Name = java.lang.String,Column Return Type Name = VARCHAR2
Catalog Name =,Schema Name =,Table Name =,Column Name = SEQUENCE,Column Label = SEQUENCE,Column Data Type = 2,Column Class Name = java.math.BigDecimal,Column Return Type Name = NUMBER
Catalog Name =,Schema Name =,Table Name =,Column Name = OVERLOAD,Column Label = OVERLOAD,Column Data Type = 12,Column Class Name = java.lang.String,Column返回類型Name = VARCHAR2
Catalog Name =,Schema Name =,Table Name =,Column Name = DEFAULT_VALUE,Column Label = DEFAULT_VALUE,Column Data Type = -1,Column Class Name = java.lang.String,Column Return Type Name = LONG
這不好,但我為我工作:
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");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.