我试图使用simpleJDBCCall.excute(in)方法执行存储过程,但是在使用过程的同义词的情况下它不会读取元数据.
这是代码.
SimpleJdbcCall optOutCall = new SimpleJdbcCall(dataSource)
.withSchemaName("USER_SCH")
.withCatalogName("USER")
.withProcedureName(ADD_ADDRESS)
.declareParameters(
new SqlOutParameter("returnCode", Types.NUMERIC),
new SqlParameter("product_id", Types.NUMERIC),
new SqlParameter("user_id", Types.NUMERIC),
new SqlParameter("email_address", Types.VARCHAR));
long returnCode = 0;
inputs.addValue("returnCode", returnCode);
inputs.addValue("product_id", 1);
inputs.addValue("user_id", 45673);
inputs.addValue("email_address", "a.b@abc.com");
optOutCall.execute(inputs);
Run Code Online (Sandbox Code Playgroud)
这里" ADD_ADDRESS "过程存在于名为" USER_DATA " 的模式中的" USER "包下.我在另一个名为" USER_SCH "的模式中为同一个包/过程创建了一个同义词.当我使用simpleJDBCCall.execute()方法执行代码时,它不读取元数据并抛出以下execption.
Caused by: java.sql.SQLException: ORA-06550: line 1, column 7:PLS-00306: wrong number or types of arguments in call to 'ADD_ADDRESS'ORA-06550: line 1, column 7:PL/SQL: Statement ignored
Run Code Online (Sandbox Code Playgroud)
这是日志消息.
[07 Oct 2014 10:32:49,019] [DEBUG] [org.springframework.jdbc.core.simple.SimpleJdbcCall]: [JdbcCall call not …Run Code Online (Sandbox Code Playgroud)