我使用Oracle程序并批量处理。
CallableStatement st = con.prepareCall ("{call MyProc (123)}");
...
st.addBatch ();
现在程序已转换为函数。因此,批处理不再有效,忽略返回值也不起作用。 如果我没有设置“?=”,则找不到该功能。
CallableStatement st = con.prepareCall ("{? = call MyFunc (123)}");
但是没有批处理,运行所有的调用都需要很长时间。我必须做很多。
那么有没有办法可以在不触及函数的情况下忽略JDBC级别的返回值?我想要我的配料回来。
答案 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);
}