2015-09-04 55 views
0

我有以下程序:如何註冊表的CallableStatement

procedure GetContractInfo(RequestID number, ParamNames out TVarcharArray, ParamValues out TVarcharArray, 
           SessionID in IRBiS_Const.TSessionID default null); 

type TVarcharArray is table of varchar2(255) index by binary_integer; 

如何使用CallableStatement的我註冊ParamValues out TVarcharArray?這是我的努力:

callableStatement.registerOutParameter(2, Types.ARRAY,"VARCHAR2"); 

但服務器說

WARN : org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 17074, SQLState: 99999

ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - invalid template name(that was roughly translated): POOL_REQUESTHANDLER.VARCHAR2

回答

0

從Java,你只能訪問架構層次的集合。
試試這個。
甲骨文

create or replace type TVarcharArray is table of varchar2(255); --(without index by binary_integer) 


和Java代碼。

public static void main(String[] args) throws SQLException, Exception { 
    Connection con = ConnectionDefinition.getOracleConnection(); 
    CallableStatement cl = con.prepareCall("declare " + 
              " a TVarcharArray;" + 
              " begin " + 
              " a := TVarcharArray('A','B','C');" + 
              " ? := a;" + 
              " end;\n" + 
              ""); 
    cl.registerOutParameter(1, Types.ARRAY,"TVARCHARARRAY"); 
    cl.execute(); 
    String[] objArr = (String[]) (cl.getArray(1)).getArray(); 
    for(String tmp: objArr){ 
     System.err.println(tmp); 
    } 
    con.close(); 

}