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

时间:2018-06-05 14:32:05

标签: oracle jdbc plsql

我使用Oracle程序并批量处理。

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

现在程序已转换为函数。因此,批处理不再有效,忽略返回值也不起作用。 如果我没有设置“?=”,则找不到该功能。

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

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

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

2 个答案:

答案 0 :(得分:2)

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

像这样的东西

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

答案 1 :(得分:0)

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