connect by level 是oracle中一组关键字,是用来实现递归查询的,譬如说实现查询 1,2,3,4 .....n 的数字可以使用connect by level
SQL语句如下:
select level +1 from dual where connect by level <=10
这种方式可以实现查询1到n的数字,共有n行
前端时间开发一个会员卡入库的功能,当给出会员卡信息的开始和结束号时,在审核通过的时候要将每张卡信息都进行保存,在开始的时候使用hibernate进行保存,
在进行压力测试的时候发现如果一次性入库一百万张卡,发现会很耗时间,大概用了20分钟,这对于入库来说会很慢,要进行优化
最后发现使用connect by level 关键字可以很轻松的实现,同样是一百万张卡只用了10秒钟,速度不知快了多少
SQL语句如下:
sql = "insert into tb_memcardinfo (MEMCARDINFO_ID,vipclass_id,vipcode,cardstatus,create_user,"
+ "user_group,create_date,modifier,modi_date,flag,jointype,inmall_id)"
+ " select seq_tb_memcardinfo.nextval ,"
+ c.getVipclassId()
+ ","
+ c.getStartno()
+ "+level-1,'0','"
+ ie.getCreateUser()
+ "','"
+ ie.getUserGroup()
+ "', SYSDATE,'"
+ user.getUserAcc()
+ "',"
+ " SYSDATE ,0,'0',"
+ ie.getInmallId()
+ " from dual connect by level <= "
+ c.getCardqty();