rowid: 表示记录的物理地址, 当表中的记录确定下来了, rowid就不会发生变化, 除非删除记录, rowid才会消失我现在对rownum和sequence疑惑? rownum是不是插入记录时设置的sequence的值? 如果是, 这两者有什么区别?

解决方案 »

  1.   

    rowid是一个伪列,对数据进行了从1开始的顺序编号的
    而sequence是一个数据库对象,是个序列值,根本是两回事。
      

  2.   

     rownum是不是插入记录时设置的sequence的值? 
    这是一个在基表中不存在的列,是在生成结果集时加进去的。
      

  3.   

    同意一楼
    打个比方
    rownum相当于for循环里的i,只是表示sql查询的数据流水编号而已,同一行数据不同的sql查询就不一样了,最简单的测试order by xx desc sequence是个高级的计数器语言粗俗,不知道说明白没
      

  4.   

    rownum是在每次查询时产生,从1开始
    sequence是创建时开始起作用,相似于某个表,只不过它只有一个值,且通常只能累进
      

  5.   

    rownum是oracle对表查询提供的一个方便(扩展)
    sequence则是一字段类型 定义了某列之后 该列在以后的数值插入时会累加
      

  6.   

    rownum是伪列 只在查询中使用,在查询结果中自动产生1,2,3.。
    sequence 是一个计数器  
      

  7.   

    最近被sequence搞得郁闷死了。多个人同时操作sequence时,会有很多不爽的事
      

  8.   

    rownum和sequence完全是两回事啊,rownum是插入时产生的伪列
    而sequence是用来产生一个序列的,可以用来做主键
      

  9.   

    --sequence
    序列中两个重要属性                         
    NEXTVAL 返回下一个可用的值
    CURRVAL 返回当前的序列中值
    对于新定义的序列必须先用NEXTVAL产生值,再可以用CURRVAL返回当前值。
    Alter Sequence 
    修改序列定义
    Drop Sequence
    从数据库中删除序列
    序列的数据字典
    user_sequences
    应用举例:                                    0                      
    create sequence NumSeq increment by 1 start with 1 maxvalue 999;//NumSeq 序列名,increment by 1 按1自增,start with 1 从1 开始,maxvalue 999 最大值为999。
    create table test (tNo int);
    insert into test values(NumSeq.nextval);
    select NumSeq.currval from dual
    --rownum
    select rowid,rownum,empno from emp;//rowid和rownum为隐藏列,每个表都有,平时不显示,
    rowid为每一行唯一表示id,是一个绝对地址,rownum为一个序列,是相对的,有可能变化。
    select * from emp where rownum<=5;//选定前5条记录,注意:改条件运算符只能使用<或<=,不能使用=或大于,因为根据关系型理论当中,表中的数据是没有限定的。
      

  10.   


    注意:改条件运算符只能使用 <或 <=,不能使用=或大于,因为根据关系型理论当中,表中的数据是没有限定的。这个没看懂,可否解释一下,谢谢
    1.=为什么不行呢??
    2.rownum在一个结果集中式无穷大??
      

  11.   

    我个人的理解是这样的:
    因为1是基准,rownum是个相对的东西,必须先有1才能有2,
    所以:select * from table where rownum=1

    select * from table where rownum>=1是正确的
    但是
    select * from table where rownum=2 或
    select * from table where rownum>=2
    是查不出数据的,因为rownum一定要找到序列的源头,如果用小于或小于等于的话,很明显序列的源头就是1,这样说不知道你能不能理解