Oracle 分區(qū)表的 FOR 語句,你這樣用過嗎?
作者:楊廷琨
原文鏈接:
https://www.modb.pro/db/15418
在11g以后,Oracle簡化了指定分區(qū)的方式,不再需要明確指定分區(qū)名稱,而是可以通過指定分區(qū)鍵值列數(shù)據(jù)的方式來指向?qū)?yīng)的分區(qū)。
指定一個(gè)分區(qū)除了使用分區(qū)名稱外,很多時(shí)候還可以使用FOR語句。從11g開始,對(duì)分區(qū)進(jìn)行操作的時(shí)候,不僅可以使用分區(qū)名稱,還可以使用FOR語句。
在10g中,MERGE RANGE分區(qū)的語句如下:
而在11g中,除了使用分區(qū)名稱外,還可以使用FOR語句來代替,比如:
這種語法的優(yōu)勢(shì)對(duì)于范圍分區(qū)還不是很明顯,而對(duì)于INTERVAL分區(qū)就十分有意義了。由于INTERVAL分區(qū)的分區(qū)名稱是系統(tǒng)產(chǎn)生的,用戶對(duì)INTERVAL分區(qū)最直觀的莫過于存在分區(qū)中的數(shù)據(jù)的范圍,根據(jù)分區(qū)的定義和INTERVAL的設(shè)置很容易可以確定分區(qū)的范圍和其中的數(shù)據(jù),但是分區(qū)的名稱就必須通過數(shù)據(jù)字典才能查詢得到。
一個(gè)INTERVAL分區(qū)的簡單的例子:
繼續(xù)上面的例子:
下面打算通過FOR語句的方式合并P2和P3分區(qū):
根據(jù)錯(cuò)誤文檔的描述,感覺是分區(qū)鍵值指定出現(xiàn)了錯(cuò)誤,查詢分區(qū)信息:
難道是分區(qū)鍵值指定有問題:
最終發(fā)現(xiàn)了問題所在,F(xiàn)OR語句中指定的并不是分區(qū)定義時(shí)使用的值,而是存儲(chǔ)在當(dāng)前分區(qū)中的值:
因此Oracle并非根據(jù)分區(qū)定義來判斷分區(qū),而是根據(jù)用戶給出的值,來判斷所屬分區(qū),所以,P1分區(qū)和SYS_P78分區(qū)的合并完全可以寫成:
由于FOR語句的這種特性,使得HASH分區(qū)也可以使用這個(gè)特性:
這個(gè)例子對(duì)包含ID為6的分區(qū)進(jìn)行了MOVE操作,而且甚至不需要指定的ID存在。
最后給一個(gè)簡單的LIST分區(qū)的SPLIT的例子:
想了解更多關(guān)于數(shù)據(jù)庫、云技術(shù)的內(nèi)容嗎?
快來關(guān)注“數(shù)據(jù)和云"、"云和恩墨,"公眾號(hào)及"云和恩墨"官方網(wǎng)站,我們期待大家一同學(xué)習(xí)與進(jìn)步!
小程序”DBASK“在線問答,隨時(shí)解惑,歡迎了解和關(guān)注!
下一篇:Oracle 發(fā)力 MySQL,MariaDB 成功上市,大規(guī)模融資銳減