国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

用Oracle的解析函數發現序列間隙

2024-08-29 13:31:47
字體:
來源:轉載
供稿:網友

數據庫表格中經常用到值序列。無論是作為數據本身自然產生的,還是由oracle 的序列對象分配的,它的目的就是用一個唯一的、遞增的數字給每一行編號。

在編號的過程中,產生間隙的原因多種多樣。如果一個存儲過程從一個序列中挑選某個數字,定為本地變量,但是從來不用它,這個數字就丟失了。它將不能再返回到原序列中,結果就造成數值序列中存在一個間隙。關系型數據庫模型中不必擔心這一點。但是有時候人們在意這一點,這些人想知道是哪些數字丟失了。

一個顯而易見的方式就是用pl/sql:在已排序指針中循環,并且用一個本地變量進行存儲,把每一個數值與其前一行的進行比較。這種方法的問題在于效率很低,速度很慢。另外一個不常用的解決辦法就是對表格做一個自合并,實質也就是用某種標準使每一行與其前一行相匹配。這種方法很難編寫代碼。

oracle的解析函數為檢查間隙提供了一種要快捷得多的方法。它們使你在使用完整的、面向集合的sql處理的同時,仍然能夠看到下一個行(lead)或者前一行(lag)的數值。

下面是這些函數的格式:

{lead | lag} (value_expression, offset, default)

over ([partition by expr] order by expr)

通常,value_expression是一個你想要檢索的數據列。參數offset是指你想要往前或往后讀取的行數,default則是到達任意一個分區的開頭或者結尾(即沒有與之相匹配的行)時返回的數值。

列表a中的腳本是一系列從工作地傳感器自動收集來的數據。傳感器裝置自動給每一個測量值編上號,我們要找出結果有沒有缺失。

在列表b中,我們將數據按照測量值編號排序,運用lag函數,把偏移量設置為1,使得每一行與其前一行對應起來。第一行將沒有對應量,所以相應地,將返回默認值0。因為間隙不可能發生在第一行,所以我們通過之前要求測量值大于0而將其刪除。

剩下的就是一組虛擬的行,顯示的是前一行的測量值編號(“before_gap”)和當前行的測量值編號(“after_gap”)。如果兩者之差大于1,就說明這兩行之間存在間隙。

同時也要注意到,with子句在查詢開始的時候把解析子查詢命名為“aquery”。那么我們就可以在主select 語句中的where 子句中訪問“aquery”中的數列。

  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 呼图壁县| 赞皇县| 建湖县| 仁寿县| 屯留县| 云霄县| 磴口县| 夏津县| 读书| 康保县| 大田县| 义马市| 英山县| 丹棱县| 偏关县| 岗巴县| 凌云县| 闽侯县| 中牟县| 丰县| 祥云县| 舒城县| 威信县| 乌拉特后旗| 那曲县| 义乌市| 慈利县| 连州市| 沙河市| 仙游县| 伊金霍洛旗| 隆昌县| 绿春县| 临沭县| 海门市| 兴义市| 曲周县| 万载县| 盐津县| 高要市| 锦屏县|