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