ROWNUM是不能这么用的,而且这么做对数据不安全,你根本无法控制更新那一条纪录。

解决方案 »

  1.   

    请详细说明一下rownum的用法好吗?
    可以用select * from mytable where rownum<4去记录的前三行吧?为什么我上面的用法就不行,区别究竟在哪呢?
      

  2.   

    rownum会收很多因素的影响,我想它应该是按照ROWID来排序的,给查出的每一天纪录一个顺序号,从1开始。
    这样是可以的:
    select * from mytable where rownum<4
    这样就错了:
    select * from mytable where rownum>4
    没有rownum=1是不会有rownum=2的。
    如果你写了WHERE子句屏蔽了一部分纪录,那么查询结果的rownum会发生相应变化。
    这么说你理解了吗?-------------------------------------------------
    地狱天堂,皆在人间!
    http://www.chinajavaworld.com
      

  3.   

    好象不是如9Thoughts说的那样
    rownum只是记录的一个序号,其意是第一条记录的rownum为1,第二条为2……依次……
    其依查询条件变化而变化
    而记录的rowid却是不变化的,一条记录自insert之后,其rowid已经固定下来
      

  4.   

    我把update EMP2 set JOB='analyst'where rownum=2中的rownum换成了rowid,如下:
        update EMP2 set JOB='analyst'where rowid=2,
    为什么说数据类型不一致?
      

  5.   

    你是说结果集不变的情况,跟我说的意思不同。
    如前所述,rowid=2是行不通的。
      

  6.   

    第一句是对feng_zi(风子)说的,其实只需简单做一下就知道了。
      

  7.   

    可以对rownum=1的行进行update操作,rownum=2不可以。
    rownum顾名思义,行数。是一个从1开始某个范围,如9Thoughts(一片绿洲) 所说。rowid存储记录的标识。在整个数据库内,某条记录的唯一标识。看下面例子,就明白了:MSJ>select rowid,rownum,a1,a2 from a;ROWID                 ROWNUM        A1 A2
    ------------------ --------- --------- ------
    AAABE9AACAAAAeXAAA         1         2 lixuef
    AAABE9AACAAAAeXAAB         2         1 mashan
      1  update a
      2  set a2='lxf'
      3* where rowid='AAABE9AACAAAAeXAAA'
    MSJ>/1 row updated.MSJ>select * from a;       A1 A2
    --------- ------
            2 lxf
            1 mashan