如何在Spring启动时使用SimpleJdbcCall触发dbms_scheduler作业?

时间:2018-06-05 08:55:45

标签: java oracle spring-boot scheduler

我正在尝试从我的Spring Boot服务调用一个作业,我正在使用JDBCTemplate在DB上运行Selected查询。我使用SimpleJdbcCall

JdbcTemplate template = new JdbcTemplate(dataSource);
    SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(template);
    simpleJdbcCall
          .withCatalogName("dbms_scheduler")
          .withProcedureName("run_job")
          .execute(new MapSqlParameterSource("JOB_NAME","My_Job_Name"));

}

但是我收到了这个错误:

Caused by: org.springframework.jdbc.BadSqlGrammarException: CallableStatementCallback; bad SQL grammar [{call DBMS_SCHEDULER.RUN_JOB()}]; nested exception is java.sql.SQLException: ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'RUN_JOB' ORA-06550: line 1, column 7: PL/SQL: Statement ignored

我尝试使用.withSchemaName代替withCatalogName但我收到同样的错误。

非常感谢任何帮助。 谢谢!

1 个答案:

答案 0 :(得分:0)

我使用以下代码解决了CallableStatement的问题:

String sql = "{call DBMS_SCHEDULER.RUN_JOB(?)}";

      try (Connection conn = dataSource.getConnection(); 

              CallableStatement stmt = conn.prepareCall(sql);) {

                 //Set IN parameter
                 stmt.setString(1, "CTI_QUEUEHANDLER");

                 //Execute stored procedure
                 stmt.execute();

      } catch (SQLException e) {
         e.printStackTrace();
      }