【发布时间】:2020-11-19 01:31:32
【问题描述】:
我正在尝试从我的 java 应用程序中调用几个存储的函数,但是无论我调用什么函数,我都会遇到相同的错误。 例如,给定这个函数:
function insert_value (input_name varchar2) return number;
我正在尝试使用:
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
SimpleJdbcCall call= new SimpleJdbcCall(jdbcTemplate)
.withCatalogName("MY_PACKAGE_NAME")
.withFunctionName("insert_value")
.withoutProcedureColumnMetaDataAccess()
.declareParameters(
new SqlParameter("input_name", Types.VARCHAR));
SqlParameterSource parameterMap = new MapSqlParameterSource()
.addValue("input_name", "John Doe");
int idNumber = call.executeFunction(Integer.class,parameterMap);
我总是遇到同样的错误:
java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'INSERT_VALUE'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
您可以看到参数的名称是正确的,我已经检查了我的 jdbc 驱动程序是否支持命名参数,但我不知道如何在 SimpleJdbcCall 上传递索引而不是参数名称。
有什么建议吗?请记住,我有几个更复杂的函数,我以相同的方式调用它们返回相同的错误。
【问题讨论】:
-
尝试改用 "call.executeFunction(Integer.class" call.executeFunction(BigDecimal.class
-
没有任何改变...这也发生在返回 VARCHAR2 的函数中
-
你试过大写参数名吗?即 INPUT_NAME?
-
是的,我有。用于参数和函数名
-
你可以试试 SqlParameterSource parameterMap = new MapSqlParameterSource().addValue("input_name", "John Doe", Types.VARCHAR);
标签: java oracle jdbc plsql simplejdbccall