Java 如何为callableStatement注册表

Java 如何为callableStatement注册表,java,oracle,plsql,Java,Oracle,Plsql,我有以下程序: 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 b

我有以下程序:

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注册到TVarcharArray中?这是我的努力:

callableStatement.registerOutParameter(2, Types.ARRAY,"VARCHAR2");
但服务器说

警告:org.hibernate.engine.jdbc.spi.SqlExceptionHelper-SQL错误: 17074,SQLState:99999

错误:org.hibernate.engine.jdbc.spi.SqlExceptionHelper- 粗略翻译的模板名称无效:POOL_REQUESTHANDLER.VARCHAR2


从java中,您只能访问模式级集合。 试试这个。 神谕

和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();

}
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();

}