我试图调用只有一个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:忽略语句
答案 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));