PLS-00306:调用的参数的数量或类型错误 - 错误

时间:2014-08-15 15:57:03

标签: ora-06550

在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 SimpleJdbcCall执行此过程,模式名称为S2,但它给了我上述错误。

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

当我使用Schema名称执行相同的过程时,它实际存在(S1),然后使用spring-java执行正常。

是否存在与Schema S2中为此程序包A ??

创建的同义词相关的任何问题

我在这里遗漏了什么吗?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

程序规范

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));

这&#34;程序1&#34;存在于Schema-B中,但我在Schema-A中创建了此过程的同义词,我正在尝试执行此过程 使用&#39; Schema-A&#39;但如果我给出模式名称&#34; Schema-B&#34;它会抛出错误。在java代码中然后它正确执行并返回结果。

答案 2 :(得分:0)

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

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

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

老问题,所以我知道这不会帮助OP,但希望可以帮助某人。