在更新oracle中数据时使用的sql 中有in 或 not in ,程序运行抛出了ORA-01795的异常
sql代码片段
update CMS_CY_USER set tickets=0 where race_num not in ( " + buffer.toString() + " )";
当buffer.toString()中的要更新的字段值超过1000 时就会抛出ORA-01795的异常
解决的代码示例
private void resetTickets(List<CmsCyUser> users,JdbcTemplate jdbcTemplateOracle) {
if(users==null||jdbcTemplateOracle==null||users.size()==0){
return;
}
StringBuffer buffer = new StringBuffer();
int size = users.size();
for(int i=0; i<size; i++) {
if(i == (size-1)){
buffer.append("'" + users.get(i).getRaceNum() + "'"); //SQL拼装,最后一条不加“,”。
}else if((i%800)==0 && i>0){
buffer.append("'" + users.get(i).getRaceNum() + "' ) or race_num not IN ( "); //解决ORA-01795问题
}else{
buffer.append("'" + users.get(i).getRaceNum() + "', ");
}
}
String sql = "update CMS_CY_USER set tickets=0 where race_num not in ( " + buffer.toString() + " )";
jdbcTemplateOracle.update(sql);