首页 > 解决方案 > 带有 SimpleJdbcCall 调用函数的 PLS-00306

问题描述

我有下一个功能:

create or replace PACKAGE BODY "CATALOG_NAME" IS

    FUNCTION FUNCTION_NAME (Param1 Varchar2, Param2 Varchar2, Param3 Number)  Return Number;

END;

我正在尝试从 Java 中调用它:

JdbcTemplate template = new JdbcTemplate(this.datasource);
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(template)
  .withSchemaName("SCHEMA_NAME")
     .withCatalogName("CATALOG_NAME")
        .withFunctionName("FUNCTION_NAME");

MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("Param1", "value1");
params.addValue("Param2", "value2");
params.addValue("Param3", Integer.valueOf(0));

return simpleJdbcCall.executeFunction(Integer.class, params);

这是启动异常:

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

我注意到的第一件事是正在启动的查询有 2 个输入参数,而不是 3 个。我做错了什么?

标签: javaspringspring-jdbc

解决方案


推荐阅读