2010-10-04 81 views
1

我正在尋找一種方法從Oracle存儲過程中獲取元數據,例如輸入/輸出參數及其類型。Java:從過程中讀取元數據

我也嘗試DESC,但它不工作:

stmt = conn.createStatement(); 
ResultSet rs1 = stmt.executeQuery("desc pack.procname"); 
while (rs1.next()) { 
System.out.println(rs1.getString(1)); 
} 

任何想法什麼方式來使用,以獲得輸入/輸出參數?

Thanx爲您的時間。

回答

2

試試下面的語句:

select * 
from user_arguments 
where package_name = 'PACK' and object_name = 'PROCNAME'; 

根據包裝上的屬於,你可能需要使用該視圖_ALL_ARGUMENTS_或_DBA_ARGUMENTS_替代方案。

+0

Thanx @Codo所有我需要的meta – Adnan 2010-10-04 10:20:24

2

由於您正在使用JDBC,因此我的首選是使用JDBC元數據API檢索此信息,而不是直接查詢Oracle數據字典。 DatabaseMetaData.getProcedureColumns是獲取過程參數的通用JDBC方法。

+0

thanx賈斯汀,我來看看。 – Adnan 2010-10-04 18:30:36

0

如果您想避免直接使用JDBC,您可以使用我的開放源代碼SchemaCrawler API,它可以根據數據庫元數據創建普通的舊Java對象。

3

使用下面的代碼塊來解決問題。

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); 
    int columnPrecision  = rs.getInt(8); 
    int columnByteLength  = rs.getInt(9); 
    short columnScale   = rs.getShort(10); 
    short columnRadix   = rs.getShort(11); 
    short columnNullable  = rs.getShort(12); 
    String columnRemarks  = rs.getString(13); 

    System.out.println("stored Procedure name="+procedureName); 
    System.out.println("procedureCatalog=" + procedureCatalog); 
    System.out.println("procedureSchema=" + procedureSchema); 
    System.out.println("procedureName=" + procedureName); 
    System.out.println("columnName=" + columnName); 
    System.out.println("columnReturn=" + columnReturn); 
    System.out.println("columnDataType=" + columnDataType); 
    System.out.println("columnReturnTypeName=" + columnReturnTypeName); 
    System.out.println("columnPrecision=" + columnPrecision); 
    System.out.println("columnByteLength=" + columnByteLength); 
    System.out.println("columnScale=" + columnScale); 
    System.out.println("columnRadix=" + columnRadix); 
    System.out.println("columnNullable=" + columnNullable); 
    System.out.println("columnRemarks=" + columnRemarks); 
} 
+1

看起來這是從這裏複製並粘貼的:http://www.java2s.com/Code/Java/Database-SQL-JDBC/GetStoredProcedureSignature.htm – 2012-11-27 15:42:07