oracel批量插入数据,分批数据插入,批量插入时常遇到的报错

首先,解释:

在oracel中批量插入时是不能用VALUS(值1,值2,值3,值4,。。。。)这种方式进行批量插入的,错误例子如下:


    insert into 
   T_ZJJK_XIANGGANG(MAIL_NUM,CLCT_DATE,WEIGHT,CLCT_CITY,DEST_CD,DEST_PROV,DEST_CITY,AMOUNT)
    VALUES
    
       ( #{map.MAILNUM},#{map.CLCTDATE},#{map.WEIGHT},#{map.CLCTCITY},#{map.DESTCD},# 
    {map.DESTPROV},#{map.DESTCITY},#{map.AMOUNT})
    
    

正确的方法为:利用oracel的嘘表进行批量插入的操作,例子如下:


    insert into T_ZJJK_XIANGGANG(MAIL_NUM,CLCT_DATE,WEIGHT,CLCT_CITY,DEST_CD,DEST_PROV,DEST_CITY,AMOUNT)
    
    select 
        #{map.MAILNUM},#{map.CLCTDATE},#{map.WEIGHT},#{map.CLCTCITY},#{map.DESTCD},#{map.DESTPROV},#{map.DESTCITY},#{map.AMOUNT}
    from dual
    
    

 但是需要注意的是:批量插入时不能一次插入太多条数据,会报错sql异常,所以需要分批插入,比如一次两千条的插:

//为了防止SQL语句超出长度出错,进行分批插入
     List list = new ArrayList();
        int i3 = 0;
	          if(list.size()==0) {
	        	  continue;
	          }
	          else if(list.size()<=2000){
                  // 这里进行数据库的插入操作
	            	i3=  inserdao.XiangGangInser(list);
	            }else{
	             int times = (int)Math.ceil(list.size()/2000.0 );
	        	 for(int ii=0; ii

 

 

你可能感兴趣的:(oracel批量插入数据,分批数据插入,批量插入时常遇到的报错)