通过Java代码调用存储过程,得到错误PLS-00201:必须声明标识符
我将使用在先前代码中构建的结果集,可以看到在调试器中运行时从该列表中提取的值。当我尝试执行存储过程调用时,调用失败,callableStatement.execute();,出现以下错误: PLS-00201:必须声明标识符“INFPL01.LWN\u XML\u PURCHASEORDER” ORA-06550:第1行第7列: PL/SQL:忽略语句 这是我的密码:通过Java代码调用存储过程,得到错误PLS-00201:必须声明标识符,java,stored-procedures,java-stored-procedures,Java,Stored Procedures,Java Stored Procedures,我将使用在先前代码中构建的结果集,可以看到在调试器中运行时从该列表中提取的值。当我尝试执行存储过程调用时,调用失败,callableStatement.execute();,出现以下错误: PLS-00201:必须声明标识符“INFPL01.LWN\u XML\u PURCHASEORDER” ORA-06550:第1行第7列: PL/SQL:忽略语句 这是我的密码: public List<ProcedureResult> callLWN_XML_PURCHASEORDERPro
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;
}
公共列表
callLWN_XML_PURCHASEORDERProcedureAndSendMQMEssage(列表)
{
DSConnection dsc=新的DSConnection();
连接dbConnection=null;
CallableStatement CallableStatement=null;
字符串LWN_XML_PURCHASEORDER_Sql=“{call”+PURCHASEORDER.dbProperties.getProperty(“Schema”)+”.LWN_XML_PURCHASEORDER(?,,,,,,,,,,?)}”;
/*
*存储过程LWN\u XML\u PURCHASEORDER
*
*在数量上,
在VARCHAR2中的\u PO\u编号中,
在发布数量上,
在VARCHAR2中的\u po\u代码中,
在VARCHAR2中的对象类型中,
RET_代码输出编号,
RET_MSG OUT CLOB)
*/
列表结果=新建ArrayList();
试一试{
dbConnection=dsc.getConnection();
YmpohdroutDbo obj;
程序结果;
对于(int i=0;i存储过程LWN\u XML\u PURCHASEORDER
是否存在于架构INFPL01
中?您如何验证名称是否正确?您运行的DB登录用户是否具有查看/执行该过程的必要权限?嗨,Jim,感谢您的响应,我已经验证了命名约定是否正确nd它确实存在于架构INFPL01中。我使用Rapid SQL,我可以调出存储过程并将我的值传递到并获得预期的响应。我们使用可访问此过程的受信任用户帐户。您是否连接到正确的数据库实例?您如何知道dsc.getConnection()
返回了正确的连接?您验证了吗?显然,您连接到的任何实例都不相信该过程存在。您是否有测试和部署的实例?顺便说一句,这些都是您在发布之前应该问自己的问题,发布时您应该说明所有的故障排除步骤完成。谢谢你的提示Jim!我是新来的,你可能可以从我的低数字ha中看出。我现在正在调查连接,谢谢你的建议。我想这是我构建字符串调用过程的方式的问题。