Spring SimpleJdbcCall调用没有输入参数但带有输出参数的存储过程

时间:2013-01-24 01:03:20

标签: spring spring-jdbc

我试图调用只有一个out参数而没有输入参数的存储过程。当我如下所示调用存储过程时,我得到“错误的数字或类型的参数调用”错误

SimpleJdbcCall jdbcCall = new SimpleJdbcCall(springTemplate) 
.withCatalogName("my_package").withProcedureName("my_procedure")
.withReturnValue().withoutProcedureColumnMetaDataAccess()
.declareParameters(new SqlOutParameter("return", Types.VARCHAR));
 Map out = jdbcCall.execute();
 System.out.println((String)out.get("return"));

我不确定这里有什么问题。我收到错误

org.springframework.jdbc.BadSqlGrammarException: CallableStatementCallback; 
bad SQL   grammar [{? = call my_package.my_procedure()}]; nested exception is 
java.sql.SQLException: ORA-06550: line 1, column 13:
PLS-00306: wrong number or types of arguments in call to 'my_procedure'
ORA-06550: line 1, column 7:

非常感谢任何帮助 PL / SQL:忽略语句

1 个答案:

答案 0 :(得分:3)

我完全按照你的所作所为,并且它对我有用,请发布以下声明的结果:

select PACKAGE_NAME, OBJECT_NAME, POSITION, ARGUMENT_NAME, DATA_TYPE, IN_OUT
from USER_ARGUMENTS
where PACKAGE_NAME ='my_package' and OBJECT_NAME = 'my_procedure'
order by PACKAGE_NAME, OBJECT_NAME, POSITION

更新:
我想我发现了你的错误,引用'一个只有一个out参数而没有输入参数'的存储过程。你有一个程序,而不是一个功能。在这种情况下,你必须写:

SimpleJdbcCall jdbcCall = new SimpleJdbcCall(springTemplate) 
    .withCatalogName("my_package")
    .withProcedureName("my_procedure")
    .withoutProcedureColumnMetaDataAccess()
    .declareParameters(new SqlOutParameter("YOUR_OUTPARAMETER_NAME", Types.VARCHAR));