在更新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);

posted @ 2013-04-26 13:35  wanggd_blog  阅读(625)  评论(0)    收藏  举报