簡體   English   中英

在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 = NUM​​BER

目錄名稱=,架構名稱=,表格名稱=,列名稱= DATA_TYPE,列標簽= DATA_TYPE,列數據類型= 2,列類名稱= java.math.BigDecimal,列返回類型名稱= NUM​​BER

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 = NUM​​BER

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 = NUM​​BER

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 = NUM​​BER

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 = NUM​​BER

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 = NUM​​BER

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 = NUM​​BER

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM