【開發篇sql】 條件和表示式(四) 幾個常見的偽列

yellowlee發表於2010-05-15

4,幾個常見的偽列

 

SQL> select ora_rowscn,rowid,rownum from t_test_chr;

 

ORA_ROWSCN ROWID                  ROWNUM

---------- ------------------ ----------

6.4107E+12 AAAOG6AAFAAAAAWAAA          1

6.4107E+12 AAAOG6AAFAAAAAWAAB          2

其中ORA_rowscn主要用在閃回查詢的flashback_query_clause,有關閃回的詳細探討在閃回一章。

Rowid是每一行的唯一地址。Rowid包含了許多資訊,諸如:

資料物件的物件編號;

在資料檔案中,該行所在的資料;

行在資料塊的位置;

行所在的表空間內的資料檔案號。

所以rowid是訪問單行最快的途徑,不過如果是訪問多行的話,則稍稍有些不同,這與被訪問的行的相對位置有關,也或者叫聚簇因子。具體的影響情況見cluster一章。

可以看一個rowid的使用,例如刪除重複行:

truncate table t_test_chr;

insert into t_test_chr

  select 1, '', ''

    from dual

  union all

  select 1, '', '' from dual;

insert into t_test_chr

  select 2, '', ''

    from dual

  union all

  select 2, '', '' from dual;

delete from t_test_chr a where a.rowid in

(select min(rowid) from t_test_chr b where b.type_char = a.type_char);

 

Rownum則是結果集的臨時行標。

很多時候需要取表或者集合內的一部分資料來使用,使用rownum很容易達到這個目的。或者在需要對一部分臨時資料編號時使用,如果需要對匯入資料庫的一部分資料按照匯入的次序進行排序編號,那麼可以使用rownum的特性:

select type_char,type_varchar2,type_nvarchar2,rownum num from t_test_chr order by rowid asc

或者要獲得top n的資料:

select * from

   (select * from employees order by employee_id)

   where rownum < 11;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16179598/viewspace-662799/,如需轉載,請註明出處,否則將追究法律責任。

相關文章