当前位置: 首页 > 知识库问答 >
问题:

JdbcTemplate和来自Oracle12cDialecte包的存储过程

徐弘图
2023-03-14

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

org.springframework.boot版本“2.2.0.release”

FUNCTION getGlobalParamValue(
        pCode VARCHAR2  
    RETURN INTEGER;

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

我试过了

1.

    jdbcTemplate.update("BEGIN APP.getGlobalParamValue('base'); END;");

或者2。

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

它不起作用

我得到一个错误:

Caused by: org.springframework.jdbc.BadSqlGrammarException:CallableStatementCallback; bad SQL grammar
nested exception is java.sql.SQLException: ORA-06550`

共有2个答案

毕浩渺
2023-03-14

我得到数据集的结果是有效的

jdbcTemplate.query("select * from table(MYPACKAGE.getrows(21861, 6793, 1829,57464))",(ResultSet rs)->{
    while(rs.next()){
        System.out.println(rs.getInt("ID"));
    }
});
艾凌龙
2023-03-14

试试看:

使用JDBCTemplate:

 int returnResult = jdbcTemplate.queryForObject("SELECT APP.getGlobalParamValue(?) FROM DUAL", new Object[] {pCode});

使用EntityManager:

    BigDecimal returnResult = null;

    returnResult = (BigDecimal) entityManager.createNativeQuery(
                    "SELECT APP.getGlobalParamValue(:pCode) FROM DUAL" )
            .setParameter("pCode", yourPCode)
            .getSingleResult();
 类似资料:
  • 我有一个存储过程,它接受参数并返回一个长值。 我如何使用jdbcTemplate来调用这个存储过程并获得返回的值。 这样对吗?

  • 为了解决MySql中的问题,即某些语句只允许在我试图创建的存储过程中运行,然后在JdbcTem板提交的sql中删除存储过程。一个简单的例子是(这恰好是在Spring引导中): cript.sql在哪里 在mySql workbench中运行它可以很好地工作,但是由JdbcTemplate提交时会出现错误 据我所知,这是因为JdbcTemplate不允许使用那些

  • 如果你有什么建议,我很想听听! 谢谢:)

  • 我正在制作一个基本的电影出租模拟器应用程序,我目前有一个问题,存储输入从我的文本字段和我的组合框到变量。我设法将大多数变量转换为字符串,但是当我试图打印输出以测试它时,它总是返回“null”。 我需要弄清楚如何从组合框中获取用户所做的选择并将其存储为字符串,我还需要弄清楚如何正确存储方法的结果。我以前从来没有遇到过这个问题,所以我真的不知道如何解决它。我的代码如下: 配子类型:

  • 我想从JPA存储库中创建一个流。目标是将来自回购的实体(可能超过一百万)映射到其他实体,这些实体将依次存储在另一个回购中。 到目前为止,我构建了一个收集器,它将收集给定数量(例如1000)实体,然后将其存储到目标存储库中。这将在并行流中工作。我现在需要的是一种从源存储库中提取实体并在需要时将它们馈送到流中的好方法。 到目前为止,最有希望的是实现供应商(http://docs.oracle.com/

  • 这是可行的,但这里的问题是,在流回此方法的客户端之前,它必须首先缓冲所有字节。这会导致很多延迟,尤其是当存储在GCS中的文件很大时。 是否有一种方法可以从GCS获取文件并将其直接流到OutputStream,这里的OutputStream是针对servlet的。