JDBC:像过程一样调用Oracle函数
我使用Oracle过程并对其进行批处理JDBC:像过程一样调用Oracle函数,oracle,jdbc,plsql,Oracle,Jdbc,Plsql,我使用Oracle过程并对其进行批处理 CallableStatement st = con.prepareCall ("{call MyProc (123)}"); ... st.addBatch (); 现在这个过程被转换成一个函数。因此,批处理不再有效,忽略返回值也不起作用。 如果我没有设置“?=”则找不到函数 CallableStatement st = con.prepareCall ("{? = call MyFunc (123)}"); 但如果不进行批处理,则运行所有调用所需的
CallableStatement st = con.prepareCall ("{call MyProc (123)}");
...
st.addBatch ();
现在这个过程被转换成一个函数。因此,批处理不再有效,忽略返回值也不起作用。
如果我没有设置“?=”则找不到函数
CallableStatement st = con.prepareCall ("{? = call MyFunc (123)}");
但如果不进行批处理,则运行所有调用所需的时间太长。我必须做很多
那么,有没有一种方法可以在不接触函数的情况下忽略JDBC级别的返回值?我希望恢复批处理。当然,您可以使用Oracle语法,忽略PL/SQL块中的函数值 像这样的
con.prepareCall("""
declare
v_ignore number;
begin
v_ignore := MyFunc (?);
end;""")
当然,您可以使用Oracle语法并忽略PL/SQL块中的函数值 像这样的
con.prepareCall("""
declare
v_ignore number;
begin
v_ignore := MyFunc (?);
end;""")
对于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);
}
private Long getResultOfFunction(最终长参数1){
CallableStatementCallback action=新建CallableStatementCallback(){
公共长doInCallableStatement(CallableStatement cs)
抛出SQLException、DataAccessException{
cs.registerOutParameter(1,类型.NUMERIC);
cs.setLong(2,参数1);
cs.executeQuery();
返回cs.getLong(1);
}
};
返回getJdbcTemplate().execute(“{call?:=package_name.function_name(?)}”,action);
}
对于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);
}
private Long getResultOfFunction(最终长参数1){
CallableStatementCallback action=新建CallableStatementCallback(){
公共长doInCallableStatement(CallableStatement cs)
抛出SQLException、DataAccessException{
cs.registerOutParameter(1,类型.NUMERIC);
cs.setLong(2,参数1);
cs.executeQuery();
返回cs.getLong(1);
}
};
返回getJdbcTemplate().execute(“{call?:=package_name.function_name(?)}”,action);
}
请重新阅读问题。问题是如何在批处理模式下调用函数。使用SQL92 syntaxt返回java.sql.SQLException:不允许操作:无法批处理带有out或inout参数的存储过程
请重新阅读问题。问题是如何在批处理模式下调用函数。使用SQL92 syntaxt返回java.sql.SQLException:不允许操作:不能批处理带有out或inout参数的存储过程