2

出力パラメーターが 1 つしかなく、入力パラメーターがないストアド プロシージャを呼び出そうとしています。以下に示すようにストアド プロシージャを呼び出すと、"wrong number or types of arguments in call to" エラーが発生します。

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: ステートメントは無視されました

4

1 に答える 1

4

私はあなたがしたことを正確に試してみましたが、うまくいきました。次のステートメントの結果を投稿してください。

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

更新:
私はあなたの間違いを見つけたと思います. 「出力パラメータが1つしかなく、入力パラメータがないストアドプロシージャ」を引用してください。関数ではなく、プロシージャがあります。その場合、次のように書く必要があります。

SimpleJdbcCall jdbcCall = new SimpleJdbcCall(springTemplate) 
    .withCatalogName("my_package")
    .withProcedureName("my_procedure")
    .withoutProcedureColumnMetaDataAccess()
    .declareParameters(new SqlOutParameter("YOUR_OUTPARAMETER_NAME", Types.VARCHAR));
于 2013-01-31T13:41:21.883 に答える