如何在 Spring 引导中使用 SimpleJdbcCall 触发 dbms_scheduler 作业?
How to trigger a dbms_scheduler job with SimpleJdbcCall in Spring boot?
我正在尝试从我的 Spring 引导服务调用一个作业,我在其中使用 JDBCTemplate 来 运行 数据库上的选定查询。我使用 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
但我收到了同样的错误。
非常感谢任何帮助。
谢谢!
我使用以下代码解决了 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();
}
我正在尝试从我的 Spring 引导服务调用一个作业,我在其中使用 JDBCTemplate 来 运行 数据库上的选定查询。我使用 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
但我收到了同样的错误。
非常感谢任何帮助。 谢谢!
我使用以下代码解决了 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();
}