Spring MVC - 使用java执行Oracle存储过程?

时间:2014-04-04 14:17:37

标签: java sql spring oracle spring-mvc

我的Spring MVC应用程序和Oracle数据库之间有一个JDBCTemplate连接和一个NamedParameterJdbcTemplate连接变量。我在Oracle数据库中也有一个存储过程,它以0或1作为输入参数,并且在完成时不返回任何内容。

我需要帮助了解如何执行此存储过程。

最终我需要将此执行发送到一个线程来完成,而无需用户坐下等待,但我需要先完成此步骤。

我已经在网站上查看了其他问题寻求帮助,感觉解释并没有给我任何可以使用的东西。所以我需要任何可以提供的建议。

到目前为止我所拥有的一切甚至都不正确:

    public void processRetrosToEpay() throws SQLException{
        //CallableStatement cs = spaeJDBCTemplate.prepareCall("RP_RETRO_PROCESS(?)");
        //cs.execute();
    }

2 个答案:

答案 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);
    }

我希望这能帮助那些曾经有过这种想法的人。