首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包Oracle12cDialect中的JdbcTemplate和存储过程

包Oracle12cDialect中的JdbcTemplate和存储过程
EN

Stack Overflow用户
提问于 2019-11-01 20:20:04
回答 3查看 55关注 0票数 2

我正在尝试从包应用程序Oracle10g中调用存储过程“getGlobalParamValue

org.springframework.boot版本'2.2.0.RELEASE‘

代码语言:javascript
运行
复制
FUNCTION getGlobalParamValue(
        pCode VARCHAR2  
    RETURN INTEGER;

当我在SQL developer中运行它时,一切正常,我得到了正确的结果

我试过了

1.

代码语言:javascript
运行
复制
    jdbcTemplate.update("BEGIN APP.getGlobalParamValue('base'); END;");

或者2.

代码语言:javascript
运行
复制
    val sjc = new SimpleJdbcCall(jdbcTemplate)
                        .withCatalogName("APP")
                        .withProcedureName("getGlobalParamValue");
    sjc.useInParameterNames("pCode")
                    .withoutProcedureColumnMetaDataAccess()
                    .declareParameters(new SqlOutParameter("p_out", OracleTypes.INTEGER),
                     new SqlParameter("pCode", OracleTypes.VARCHAR));
    SqlParameterSource in = new MapSqlParameterSource()
                    .addValue("pCode", "base");
    sjc.execute(in);

它不能工作

我得到一个错误:

代码语言:javascript
运行
复制
Caused by: org.springframework.jdbc.BadSqlGrammarException:CallableStatementCallback; bad SQL grammar
nested exception is java.sql.SQLException: ORA-06550`
EN

回答 3

Stack Overflow用户

发布于 2019-11-01 22:44:06

对于我来说,获得原始类型的结果是有效的

代码语言:javascript
运行
复制
val sql = "select APP.getGlobalParamValue('baseAirport') from dual";
val seq = jdbcTemplate.queryForObject(sql, new Object[] {}, Long.class);

我找到了一个例子,很有趣的https://github.com/spring-projects/spring-integration-samples/tree/master/intermediate/stored-procedures-oracle

票数 0
EN

Stack Overflow用户

发布于 2019-11-01 22:51:10

试试这个:

使用JdbcTemplate的

代码语言:javascript
运行
复制
 int returnResult = jdbcTemplate.queryForObject("SELECT APP.getGlobalParamValue(?) FROM DUAL", new Object[] {pCode});

使用EntityManager的

代码语言:javascript
运行
复制
    BigDecimal returnResult = null;

    returnResult = (BigDecimal) entityManager.createNativeQuery(
                    "SELECT APP.getGlobalParamValue(:pCode) FROM DUAL" )
            .setParameter("pCode", yourPCode)
            .getSingleResult();
票数 0
EN

Stack Overflow用户

发布于 2019-11-01 22:58:36

对我来说,获取数据集作为结果是可行的

代码语言:javascript
运行
复制
jdbcTemplate.query("select * from table(MYPACKAGE.getrows(21861, 6793, 1829,57464))",(ResultSet rs)->{
    while(rs.next()){
        System.out.println(rs.getInt("ID"));
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58659148

复制
相关文章

相似问题

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