之前表数据是这样的:SQL> select * from tbl;NAME       GONGZI     XINGBIE
---------- ---------- -------
sr         100        男
sb         100        男
alix       $2000      mail
cooltest   $2000      mail后面由于执行了语句后,表数据变成了这样:SQL> insert into tbl
  2  select 'ok','100','男','12345' from dual
  3  connect by rownum <=5
  4  /5 rows insertedSQL> select * from tbl
  2  /NAME       GONGZI     XINGBIE WORKID
---------- ---------- ------- ------
ok         100        男       12345
ok         100        男       12345
ok         100        男       12345
ok         100        男       12345
ok         100        男       12345
sr         100        男      
sb         100        男      
alix       $2000      mail    
cooltest   $2000      mail    9 rows selected本来我想问connect by rownum <=5的作用是不是把这行同样的数据连续插入5次,而且是插入到表的前5行?
后来我在没有把上面的操作commit的情况下,又执行了一次,结果如下:
insert into tbl
  2  select 'ok','100','男','12345' from dual
  3  connect by rownum <=5
  4  /5 rows insertedSQL> select * from tbl
  2  /NAME       GONGZI     XINGBIE WORKID
---------- ---------- ------- ------
ok         100        男       12345
ok         100        男       12345
ok         100        男       12345
ok         100        男       12345
ok         100        男       12345
ok         100        男       12345
sr         100        男      
sb         100        男      
ok         100        男       12345
ok         100        男       12345
alix       $2000      mail    
cooltest   $2000      mail    
ok         100        男       12345
ok         100        男       1234514 rows selected这下可好,难道connect by rownum <=5的作用是随机插入了?最初我的表数据只有两行,而且写入第一行的数据(sr,100,男)后,再插第二行数据(sb,100,男)后,结果是它自动排到第一行数据的后面的,请看我最初两行时数据的显示的情况:select * from tbl;NAME       GONGZI     XINGBIE
---------- ---------- -------
sr         100        男
sb         100        男后面我用union all添加了两行也是顺序添加的,请看结果: insert into tbl (select 'alix','$2000','mail' from dual union all
  2  select 'cooltest','$2000','mail' from dual);2 rows insertedSQL> select * from tbl;NAME       GONGZI     XINGBIE
---------- ---------- -------
sr         100        男
sb         100        男
alix       $2000      mail
cooltest   $2000      mail现在请各位说说如果我用  insert into tbl
                      select 'ok','100','男','12345' from dual
                      connect by rownum <=5;这样的语句是不是不能顺序加入行了?怎样才能做到这个语句的结果又能顺序加入呢?

解决方案 »

  1.   

    insert都是随机插入,
    插入的时候去申请空间,申请的空间有可能是连续的,也有可能是离散的想要序号的话,可以给表加入一个字段,专门用于排序
      

  2.   

    再添加一个timestamp字段就可以办到。
      

  3.   

    添加一个新列,是timestamp类型的,插入列数据的时候,把该列填充为当前时间。
      

  4.   

    现在表的情况如下:
    SQL> select * from tbl;Name       GongZi     Xingbie WORKID Id_tbl
    ---------- ---------- ------- ------ ------
    ss         100        女           5      1
    sr         100        男           1      2
    sb         100        男           2      3
    alix       $2000      mail         3      4
    cooltest   $2000      mail         4      5
    ok         100        男       12345      6
    ok         100        男       12345      7
    ok         100        男       12345      8
    ok         100        男       12345      9
    ok         100        男       12345     10
    ok         100        男       12345 
    ok         100        男       12345 
    ok         100        男       12345 
    ok         100        男       12345 
    ok         100        男       12345 我想用类似update tbl set "Id_tbl"=rownum;这句的语句对第10行以上的行按rounum这样的序号原封不动地加入到Id_tbl列里面去,
    现在我能用下面的语句去查询第10行以上的信息(语句如下),但我在网上查到rounum是不能以rounum>10的形式来书写的,因为这样写是不能查到任何数据的,那我select尚且可以,但用update那怎么办呢?
    select rownum,workid,"GongZi","Name","Xingbie" from(select rownum no ,workid,"GongZi","Name","Xingbie" from tbl) where no > 10;
      

  5.   

    对我楼上疑问的PS:
    update tbl set "Id_tbl"=(select rownum no from tbl) where no>11;这样写是错误的,报错如下update tbl set "Id_tbl"=(select rownum no from tbl) where no>11ORA-00904: "NO": invalid identifier同样用update tbl set "Id_tbl"=(select rownum no from tbl) where rownum no>10;   也是报同样的错误。
      

  6.   

    这样写肯定也是错的啦,where条件中的字段应该是你要update的表的字段,很明显tbl表中根本没有no这个字段嘛
    我不是很清楚你要实现这样一个功能是为了什么应用,不过像楼上某人说的,你可以加个时间就行啦