oracle connect by level 的用法

来源:互联网 发布:cfve卡枪软件 编辑:程序博客网 时间:2024/05/31 13:16

connect bylevel  是oracle中一组关键字,是用来实现递归查询的,譬如说实现查询 1,2,3,4 .....n 的数字可以使用connectby level

 

SQL语句如下:

 

select level +1 from dual where connect by level <=10


这种方式可以实现查询1到n的数字,共有n行

 

前端时间开发一个会员卡入库的功能,当给出会员卡信息的开始和结束号时,在审核通过的时候要将每张卡信息都进行保存,在开始的时候使用hibernate进行保存,

在进行压力测试的时候发现如果一次性入库一百万张卡,发现会很耗时间,大概用了20分钟,这对于入库来说会很慢,要进行优化

最后发现使用connect bylevel 关键字可以很轻松的实现,同样是一百万张卡只用了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();


 

不过这只对于号码是连续的或者是有规律可循的,不然这种方式行不通
0 0
原创粉丝点击