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

JDBC:像过程一样调用Oracle函数

苗运珧
2023-03-14

我使用了一个Oracle程序,并对其进行批处理。

CallableStatement st = con.prepareCall ("{call MyProc (123)}");
...
st.addBatch ();

现在这个过程被转换成一个函数。因此批处理不再起作用,忽略返回值也不起作用。如果我不设置 "? =" 函数就找不到了。

CallableStatement st = con.prepareCall ("{? = call MyFunc (123)}");

但如果不进行批处理,运行所有调用所需的时间太长。我必须做很多。

那么,有没有一种方法可以在不触及函数的情况下忽略JDBC级别的返回值?我想要回我的配料。

共有2个答案

秦涵映
2023-03-14

对于oracle db,它将类似于:

private Long getResultOfFunction(final long param1) {

    CallableStatementCallback<Long> action = new CallableStatementCallback<Long>() {
        public Long doInCallableStatement(CallableStatement cs)
                throws SQLException, DataAccessException {

            cs.registerOutParameter(1, Types.NUMERIC);
            cs.setLong(2, param1);

            cs.executeQuery();

            return cs.getLong(1);
        }
    };

    return getJdbcTemplate().execute("{call ? := package_name.function_name (?)}", action);
}
柯建修
2023-03-14

当然,您可以使用Oracle语法,忽略PL/SQL块中的函数值。

像这样的

con.prepareCall("""
declare
 v_ignore number;
begin
  v_ignore := MyFunc (?);
end;""")
 类似资料:
  • 我有一个非常复杂的oracle存储过程,它搜索和检索一些数据。该过程返回一个输出参数-oracle游标。我通过JDBC执行过程: 问题是,查询有时会花费相当长的时间(几分钟),我希望用户能够通过单击按钮随时取消查询。我引用了stmt对象,但不幸的是(从其他线程)调用stmt.cancel()没有效果。 另一方面,当我将CallableStatement sql更改为以下查询时: 在调用stmt.c

  • 主要内容:创建CallableStatement对象,关闭CallableStatement对象,JDBC SQL转义语法在讨论JDBC Statement教程文章时,我们已经学习了如何在JDBC中使用存储过程。 本教程文章与该部分类似,但它将讲解演示有关JDBC SQL转义语法的其他信息。 就像对象创建和对象一样,它可使用同样的方式创建对象,该对象将用于执行对数据库存储过程的调用。 创建CallableStatement对象 假设需要执行以下Oracle存储过程 - 注意:上面的存储过程是为O

  • 我创建了一个存储过程,如下所示: //mysql中的存储过程 并且我正在调用Java中的存储过程,如下所示: //使用JDBC调用存储过程 但它显示了一个编译时异常,如下所示: CAN在参数中为存储的函数调用的返回值设置。

  • 我试图从JDBC调用以下pl/sql过程。 这就是我试图调用它的方式,但没有成功: 我刚刚读到oracle jdbc不支持pl/sql结构类型。因此,这在“无效名称模式:test.testrec_r”中失败 如何从Java调用这个过程?理想情况下,只使用java库/API,但这似乎几乎是不可能的,在简单的sql调用中封装pl/sql包并调用它的最佳解决方案是什么? 另外,我正在使用Spring J

  • 我需要对一个参数为PL/SQL表的过程进行JDBC调用。我正在尝试结构对象。但是我没有做正确的事情。我得到错误: ORA-04043:对象“斯科特”。“对象列表结构”不存在。 以下是代码片段: 参数“?”对于本程序,类型为: 我们非常感谢任何能让我们成功的见解谢谢

  • 问题内容: 我有一个返回sys-refcursor的Oracle函数,当我使用Hibernate调用此函数时,出现以下异常。 我该如何解决? Oracle功能 我的实体班 在DAO中 问题答案: 可以通过以下方式使用EntityManager调用Oracle函数或存储过程。 对于Oracle功能 创建一个以sys_refcursor作为返回类型的函数 在实体类中,将函数定义为 对于Oracle存储