错误的数字或类型的参数调用-错误



我在java中使用spring jdbc调用oracle plsql过程时遇到以下错误。

org.springframework.jdbc.BadSqlGrammarException: CallableStatementCallback; bad SQL grammar [{call "Procedure name"; nested exception is java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'procedure_name'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

这个过程存在于模式S1中的包a下。我已经为这个包a在模式S2中创建了一个同义词,并试图使用spring simplejdbcall执行这个过程,模式名称为S2,但它给了我上面的错误。

但是当我在模式S2中使用SqlPlus执行这个查询时,这个过程执行得很好,这意味着没有授权问题。

当我使用Schema名称执行相同的过程时,它实际上存在(S1),那么使用spring-java也可以执行得很好。

在Schema S2中为这个包A创建同义词是否有任何问题??

我在这里错过了什么吗?

我遇到了同样的问题,就像您显式声明参数一样。修复方法是额外指定:

new SimpleJdbcCall(dataSource)
    .withoutProcedureColumnMetaDataAccess()
    ...

我的假设是同义词阻止了的参数推断工作,而没有实际阻止的发生,因此驱动程序得出结论,存储过程不接受任何参数,因此不发送任何参数。

老问题,所以我知道这对OP没有帮助,但希望它能帮助到一些人。

在没有看到您的代码(PLSQL和Java端)的情况下,我不得不说,过程中需要的参数(参数没有默认值)在Java代码中没有提供,或者过程中的参数名称与您在Java中使用的名称不匹配。

程序规范

PROCEDURE procedure1(value   OUT NUMBER,
                                userId      IN  NUMBER,
                                returnCursor OUT PackageA.Types.cursorType);

java代码

SimpleJdbcCall optOutCall = new SimpleJdbcCall(dataSource)
            .withSchemaName("Schema-A")
            .withCatalogName("PackageA")
            .withProcedureName(procedure1)
            .declareParameters(new SqlOutParameter("value", Types.NUMERIC),
                               new SqlParameter("userId", Types.NUMERIC))
            .returningResultSet("returnCursor", new UserMapper(EnumType.EMAIL, userId));

这个"procedure1"存在于Schema-B中,但我已经在Schema-A中创建了这个过程的同义词,我正在尝试执行这个过程使用' schema - a ',但它抛出错误,如果我在java代码中给出模式名称"schema - b",那么它会正确执行并返回结果。

相关内容

  • 没有找到相关文章

最新更新