Java 如何设置dbms\u sql.Number\u表?
这是我的PLSQL过程: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
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过程。祝你好运。