首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleJdbcCall不适用于存储函数

SimpleJdbcCall不适用于存储函数
EN

Stack Overflow用户
提问于 2016-12-14 20:23:18
回答 1查看 1.2K关注 0票数 1

我正尝试在DB2上执行一个来自Java的存储函数。调用它的函数和代码与Spring文档的示例https://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html#jdbc-simple-jdbc-call-3中的那些非常相似。下面是函数声明:

代码语言:javascript
复制
CREATE FUNCTION ST_CLIENT_SEGMENT( p_oib VARCHAR(11) )
    RETURNS VARCHAR(10)
    NO EXTERNAL ACTION

代码如下:

代码语言:javascript
复制
//version1
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate)
    .withSchemaName("VLIB").
    .withFunctionName("ST_CLIENT_SEGMENT")
SqlParameterSource in = new MapSqlParameterSource().addValue("p_oib", "123");
return simpleJdbcCall.executeFunction(String.class, in);

//version2
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate)
    .withSchemaName("VLIB")
    .withFunctionName("ST_CLIENT_SEGMENT");
simpleJdbcCall.declareParameters(new SqlParameter("p_oib", Types.VARCHAR));
return simpleJdbcCall.executeFunction(String.class, "123");

//the same exception
//Caused by: java.sql.SQLException: [SQL0440] Routine ST_CLIENT_SEGMENT in VLIB not found with specified parameters.

有人知道为什么会这样吗?当我从SQL客户端调用该函数时,一切工作正常。

EN

回答 1

Stack Overflow用户

发布于 2016-12-14 21:52:16

我的一位同事找到了一个解决方案。这似乎是一个DB2问题http://www.itjungle.com/fhg/fhg102506-story01.html。我尝试了另一个SQL,它也给了我一个异常

代码语言:javascript
复制
jdbcTemplate.queryForObject("values vlib.ST_CLIENT_SEGMENT(?)", new Object[] {oib}, String.class);
//Caused by: java.sql.SQLException: [SQL0418] Use of parameter marker not valid.

完成此更改后,一切工作正常

代码语言:javascript
复制
jdbcTemplate.queryForObject("values vlib.ST_CLIENT_SEGMENT( CAST( ? as CHAR) )", new Object[] {oib}, String.class);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41142567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档