在我们的代码中,我们使用spring StoredProcedure来执行存储过程。我们的SP包含3个光标作为输出。在一种情况下,我们需要来自所有三个游标的输出,在另一种情况下,我们只需要从一个游标输出,所以我们在StoredProcedure中构造如下。
if (case1) {// All cursors to be used
declareParameter(new SqlOutParameter("OUTPUT1", OracleTypes.CURSOR, null, new SqlOutParamterExtension1()));
declareParameter(new SqlOutParameter("OUTPUT2", OracleTypes.CURSOR, null, new SqlOutParamterExtension2()));
declareParameter(new SqlOutParameter("OUTPUT3", OracleTypes.CURSOR, null, new SqlOutParamterExtension3()));
} else{ // only one cursor used
declareParameter(new SqlOutParameter("OUTPUT1", OracleTypes.CURSOR);
declareParameter(new SqlOutParameter("OUTPUT2", OracleTypes.CURSOR, null, new SqlOutParamterExtension2()));
declareParameter(new SqlOutParameter("OUTPUT3", OracleTypes.CURSOR);
}
这样声明有什么问题吗? 我们的代码正在进行预生产,但我们在生产中遇到“ORA 01001无效游标”错误(并非总是如此),我们怀疑,如果此代码与此问题有关?