我采用的是先前代码中构建的结果集,我可以看到该列表中的值在调试器中运行时正在拉动。当我尝试执行我的存储过程调用时,它失败并在callableStatement.execute();上发生以下错误:
PLS-00201:标识符' INFPL01.LWN_XML_PURCHASEORDER'必须申报 ORA-06550:第1行第7列: PL / SQL:忽略语句
这是我的代码:
public List<ProcedureResult>
callLWN_XML_PURCHASEORDERProcedureAndSendMQMEssage(List<YmpohdroutDbo> list)
{
DSConnection dsc = new DSConnection();
Connection dbConnection = null;
CallableStatement callableStatement = null;
String LWN_XML_PURCHASEORDER_Sql = "{call "+PurchaseOrder.dbProperties.getProperty("Schema") +".LWN_XML_PURCHASEORDER(?,?,?,?,?,?,?)}";
/*
* stored procedure LWN_XML_PURCHASEORDER
*
* in_company IN NUMBER,
in_PO_NUMBER IN VARCHAR2,
in_po_release IN NUMBER,
in_po_code IN VARCHAR2,
in_object_TYPE IN VARCHAR2,
RET_CODE OUT NUMBER,
RET_MSG OUT CLOB)
*/
List<ProcedureResult> result = new ArrayList<ProcedureResult>();
try {
dbConnection = dsc.getConnection();
YmpohdroutDbo obj;
ProcedureResult res;
for(int i=0;i<list.size();i++)
{
obj = list.get(i);
callableStatement = dbConnection.prepareCall(LWN_XML_PURCHASEORDER_Sql);
// register input fields of stored procedure
callableStatement.setInt(1, obj.getCompany());
callableStatement.setString(2, obj.getPO_Number());
callableStatement.setInt(3, obj.getPO_Release());
callableStatement.setString(4, obj.getPO_Code());
callableStatement.setString(5, (PurchaseOrder.projProperties.getProperty(Constants.SEC_KEY_COMMENT_TYPE)));
// register output fields of stored procedure
callableStatement.registerOutParameter(6, java.sql.Types.INTEGER);
callableStatement.registerOutParameter(7, java.sql.Types.CLOB);
// execute LWN_XML_PURCHASEORDER store procedure
callableStatement.execute();
res = new ProcedureResult();
res.setCode(callableStatement.getInt(6));
res.setMessage(callableStatement.getClob(7));
// send response from stored procedure execution to MQMessages
PurchaseOrder.writeClobMQMessage(res.getMessage());
// mark record as processed by updating field INTERFACE_STS to P
markRecordAsProcessed(obj, dsc);
// Send procedures result as MQMessage before processing next record
result.add(res);
}
} catch (Exception e) {
logger.error(e);
System.exit(1);
} finally {
if (callableStatement != null)
{
try
{
callableStatement.close();
}
catch (SQLException e)
{
logger.error(e);
}
}
if (dbConnection != null) {
DSConnection.close(dbConnection, null, callableStatement, null);
}
}
return result;
}
我试着查看其他帖子,但看起来并不是同样的情况。我猜测我构建字符串的方式,但我所看到的所有例子都是以类似的方式进行的。谢谢!