我的Spring MVC应用程序和Oracle数据库之间有一个JDBCTemplate连接和一个NamedParameterJdbcTemplate连接变量。我在Oracle数据库中也有一个存储过程,它以0或1作为输入参数,并且在完成时不返回任何内容。
我需要帮助了解如何执行此存储过程。
最终我需要将此执行发送到一个线程来完成,而无需用户坐下等待,但我需要先完成此步骤。
我已经在网站上查看了其他问题寻求帮助,感觉解释并没有给我任何可以使用的东西。所以我需要任何可以提供的建议。
到目前为止我所拥有的一切甚至都不正确:
public void processRetrosToEpay() throws SQLException{
//CallableStatement cs = spaeJDBCTemplate.prepareCall("RP_RETRO_PROCESS(?)");
//cs.execute();
}
答案 0 :(得分:1)
根据Java CallableStatement
API,您应该使用以下语法:
"{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}"
"{call <procedure-name>[(<arg1>,<arg2>, ...)]}"
根据OracleCallableStatement
API,您可以使用上述语法或此特定于Oracle的语法:
"begin proc (?,?); end;"
"begin ? := func(?,?); end;"
答案 1 :(得分:0)
当其他开发人员从假期回来时,我能够解决这个问题。
这是我们提出的解决方案:
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(spaeJDBCTemplate).withCatalogName("SCHEMA1").withProcedureName("PROCESS");
Map<String, Integer> inParamMap = new HashMap<String, Integer>();
inParamMap.put("process", 0);
SqlParameterSource in = new MapSqlParameterSource(inParamMap);
try{
simpleJdbcCall.execute(in);
}catch(Exception e){
log.error("Error ", e);
}
我希望这能帮助那些曾经有过这种想法的人。