2013-11-20 52 views
1

我在Oracle中有一個存儲過程,如下所示。從java調用Oracle存儲過程類型表

create or replace TYPE T_EMP_OBJ AS OBJECT (Name varchar2(20), Age CHAR(3 CHAR)); 

create or replace type T_EMP_REC as table of T_EMP_OBJ; 

create or replace PROCEDURE P_EMP (I_NAV_REC IN T_INAV_REC, p_out OUT MY_TYPES_PKG.REFCURSOR) 
AS ... 
END P_EMP; 

我從java調用該過程。我的代碼是,

StructDescriptor structDesc = new StructDescriptor("T_EMP_OBJ", oracleConnection); 
ArrayDescriptor arrayDesc2 = new ArrayDescriptor("T_EMP_REC", oracleConnection); 
    Object[] objType = new Object[2]; 
    objType[0] = new String("AAA"); 
    objType[1] = new String("25"); 
    STRUCT struct = new STRUCT(structDesc, oracleConnection, objType); 
    STRUCT[] structs = new STRUCT[1]; 
    structs[0] = struct; 
    oracle.sql.ARRAY array = new oracle.sql.ARRAY(arrayDesc2, oracleConnection, structs); 
    OracleCallableStatement statement = (OracleCallableStatement) oracleConnection.prepareCall("CALL P_EMP(?,?)"); 
    statement.setArray(1, array); 
    statement.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR); 
    statement.execute(); 
    ResultSet results = ((OracleCallableStatement) statement).getCursor(2); 
    while (results.next()) { 
     logger.info("NAME==>"+results.getString(1)); 
     logger.info("AGE===>"+results.getString(2)); 
    } 

雖然我得到的記錄,值爲空。這意味着如果輸出是2行,則while條件執行並打印爲null。在SQL Developer中它工作正常。提前致謝。

回答

2

終於找到了答案here。在類路徑中包含orai18n.jar後,它工作正常。

+1

相關知識,參考鏈接+1。但我跟着鏈接 - http://stackoverflow.com/questions/3626061/how-to-call-oracle-stored-procedure-which-include-user-defined-type-in​​-java?lq=1它的工作大 – spiderman