Java 如何设置dbms\u sql.Number\u表?

Java 如何设置dbms\u sql.Number\u表?,java,jdbc,plsql,Java,Jdbc,Plsql,这是我的PLSQL过程: procedure ChangeRequest(RequestID number, MethodID number, FieldIDs dbms_sql.Number_Table, FieldValues dbms_sql.Varchar2_Table, SessionID IRB

这是我的PLSQL过程:

procedure ChangeRequest(RequestID number,
                        MethodID number,
                        FieldIDs dbms_sql.Number_Table,
                        FieldValues dbms_sql.Varchar2_Table,
                        SessionID IRBiS_Const.TSessionID default null)
我想用Java中的
CallableStatement
设置
FieldIDs dbms\u sql.Number\u Table
参数,但我不知道如何设置。那是什么东西?数组还是什么?在
CallableStatement
中是否有该类型的setter方法?

好吧,我做到了:

sessionFactory.getCurrentSession().doWork(new Work() {
                public void execute(Connection con) throws SQLException {
                    OracleCallableStatement callableStatement = null;
                    try {
                        callableStatement = (OracleCallableStatement) con
                                .prepareCall("begin PREQUEST.ChangeRequest(?,?,?,?,?); end;");
                        callableStatement.setInt(1, request_id);
                        callableStatement.setInt(2, method_id);

                        callableStatement.setString(5, sessionId);
                        callableStatement.setPlsqlIndexTable(3, field_ids,
                                field_ids.length, field_ids.length,
                                OracleTypes.NUMBER, 0);
                        callableStatement.setPlsqlIndexTable(4, fieldValues,
                                field_ids.length, field_ids.length,
                                OracleTypes.VARCHAR, 0);
                        callableStatement.execute();

                    } finally {
                        if (callableStatement != null) {
                            callableStatement.close();
                        }
                    }
                }
            });
您需要注意的主要事项是
prepareCall
方法:

callableStatement = (OracleCallableStatement) con
                                    .prepareCall("begin PREQUEST.ChangeRequest(?,?,?,?,?); end;");
正如您所看到的,里面是PLSQL语句。

简短的回答是“您不能”。较长的答案是“你不能,但你可以解决它(尽管它远不简单)”。看见在我看来,最好用易于传递的类型编写一个包装过程,从Java调用包装过程,然后让包装过程调用“真正的”ChangeRequest过程。祝你好运。