2010-10-04 3 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 all the meta Мне нужно – Adnan

2

Поскольку вы используете JDBC, мое предпочтение было бы использовать API метаданных JDBC для извлечения этой информации, а не напрямую обращаться к словарю данных Oracle. DatabaseMetaData.getProcedureColumns - это общий метод JDBC для получения параметров для процедуры.

+0

thanx Justin, я посмотрю. – Adnan

0

Если вы хотите не использовать JDBC напрямую, вы можете использовать API с открытым исходным кодом SchemaCrawler, который создает простые старые объекты 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 –

Смежные вопросы