Oracle中批量产生指定条数的记录

需求:
1、批量产生10万条客户信息插入到pers表中
2、客户编号不能重复、客户姓名不能重复、客户编号从100000开始

解决方法:
insert into pers(persnbr,persname) values select (level-1)+100000,‘客户测试姓名-’||((level-1)+100000)from dual connect by level <=100000
或者
insert into pers(persnbr,persname) values select (rownum-1)+100000,‘客户测试姓名-’||((rownum-1)+100000)from dual connect by rownum<=100000

解析:
connect by:构造了一个循环
rownum或level:加条件终止循环。如果执行select * from dual connect by 1=1; 则会无限循环下去直至内存溢出

Connect by的典型用法
start with 条件1 connect by prior 条件2 where 条件3:用于构成树查询(生成递归算法)
    条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
    条件2 是连接条件,用PRIOR表示上一条记录,比如 CONNECT BY PRIOR id = parent_id就是说上一条记录的id 是本条记录的parent_id,即本记录的父亲是上一条记录。
    条件3 是过滤条件,用于对返回的所有记录进行过滤。
    举例:有一个机构表org,其中有两列orgnbr(机构号),parentorgnbr(父机构号),查询orgnbr=1的所有子机构的列表:
    select * from org start with orgnbr=1 connect by prior orgnbr=parentorgnbr

总结: connect by 既可以构造循环也可以构造递归,通过循环可以生成指定数量的数据,通过递归可以构造查询树。

 

猜你喜欢

转载自blog.csdn.net/lubiaopan/article/details/14229835