日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle伪列

發布時間:2025/3/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle伪列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Oracle的偽列以及偽表

?

??oracle系統為了實現完整的關系數據庫功能,系統專門提供了一組成為偽列(Pseudocolumn)的數據庫列,這些列不是在建立對象時由我們完成的,而是在我們建立時由Oracle完成的。Oracle目前有以下偽列:

?

一、偽列:

?

?CURRVAL AND NEXTVAL 使用序列號的保留字

?

??LEVEL查詢數據所對應的層級

?

?ROWID 記錄的唯一標識

?

?ROWNUM 限制查詢結果集的數量

?

?Rowid的概念:rowid是一個偽列,既然是偽列,那么這個列就不是用戶定義,而是系統自己給加上的。對每個表都有一個rowid的偽列,但是表中并不物理存儲ROWID列的值。不過你可以像使用其它列那樣使用它,但是不能刪除改列,也不能對該列的值進行修改、插入。一旦一行數據插入數據庫,則rowid在該行的生命周期內是唯一的,即即使該行產生行遷移,行的rowid也不會改變。

?

?ROWNUM是一個序列,是oracle數據庫從數據文件或緩沖區中讀取數據的順序。它取得第一條記錄則rownum值為1,第二條為2,依次類推。如果你用>,>=,=,between...and這些條件,因為從緩沖區或數據文件中得到的第一條記錄的rownum1,則被刪除,接著取下條,可是它的rownum還是1,又被刪除,依次類推,便沒有了數據。

?

?

二、偽表

?

DUAL

?

該表主要目的是為了保證在使用SELECT語句中的語句的完整性而提供的。

?

一般用于驗證函數。例如:

?

select sysdate,to_char(sysdate,'yyyy-mm-ddHH24:mm:ss') from dual

?

?

oracle的幾個偽列函數

?

?

ORACLE有幾個函數專門用來產生偽列的,rownum,rowid,row_number(),rank,dense_rank,lan

?

?

?1Connect by 語句

?

該語句結合偽列rownumlevel可以產生一個結果集.

?

1.???基本用法:

?

產生1~~100之間的整數

?

Select rownum xh from dual connect byrownum<=100;

?

Select level xh from dual connect bylevel<=100;

?

2.? 高級用法

?

2.1.產生所有漢字,漢字內碼為:19968~~~40869之間

?

?select t.* from(

???select rownum xh,nchr(rownum) hz from dual

???connect by rownum<65535

? ) t

?where t.xh between 19968 and 40869

?

?2rownum按行的順序自動增加產生

?

row_number() 給每個組內的不同記錄進行排號(分組可不設)

?

1.select t.c_group,?

2.??????t.c_code,?

3.??????t.c_desc,?

4.??????<span style="color:#ff0000;">row_number</span>()over(PARTITION BY c_group ORDER BY c_desc DESC) rn?

5.?from tp_dictionary t?

6. where t.c_group in ('PPSJ001','PPSJ002');?

?

?

?

?3Rank() 按并列情況跨越排序

?

1.select t.c_group,?

2.??????t.c_code,?

3.??????t.c_desc,?

4.??????<span style="color:#ff0000;">RANK</span>() over(ORDER BY c_code ) rn?

5.?from tp_dictionary t?

6. where t.c_group in ('PPGL001','PPSJ002');?

?

?

?

?4Dense_Rank() 按并列情況排序,不跳躍

?

1.select t.c_group,?

2.??????t.c_code,?

3.??????t.c_desc,?

4.??????<span style="color:#ff0000;">Dense_RANK</span>()over( ORDER BY c_code ) rn?

5.?from tp_dictionary t?

6. where t.c_group in ('PPGL001','PPSJ002');?

?

?

?

?5Lag對列進行偏移(下面是偏移2)

?

1.select t.c_group,?

2.??????t.c_code,?

3.??????t.c_desc,?

4.??????lag(c_code,2,null) over(PARTITION BY c_group ORDER?

5. BY c_desc asc) rn?

6.?from tp_dictionary t?

7. where t.c_group in ('PPGL001','PPSJ002');?

?

?

linux

本篇文章來源于 Linux公社網站(www.linuxidc.com)?原文鏈接:http://www.linuxidc.com/Linux/2012-01/51112.htm

轉載于:https://www.cnblogs.com/wanghang/p/6299536.html

總結

以上是生活随笔為你收集整理的oracle伪列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。