【问题标题】:JDBC: Call Oracle function like a procedureJDBC:像过程一样调用 Oracle 函数
【发布时间】:2018-06-05 14:32:04
【问题描述】:

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

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

现在该过程被转换为一个函数。因此批处理不再起作用,并且忽略返回值也不起作用。 如果我不设置“?=”,则找不到该功能。

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

但是如果没有批处理,运行所有调用需要很长时间。我必须做很多。

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

【问题讨论】:

    标签: oracle jdbc plsql


    【解决方案1】:

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

    类似的东西

    con.prepareCall("""
    declare
     v_ignore number;
    begin
      v_ignore := MyFunc (?);
    end;""")
    

    【讨论】:

      【解决方案2】:

      对于 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);
      }
      

      【讨论】:

      • 请重新阅读问题。问题是关于如何在批处理模式下调用函数。使用 SQL92 语法返回 java.sql.SQLException: operation not allowed: Stored procedure with out or inout parameters cannot be batched
      猜你喜欢
      • 1970-01-01
      • 2019-06-06
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 2020-01-24
      • 2012-10-11
      相关资源
      最近更新 更多