建立單獨的分割槽儲存NULL記錄
今天朋友問我一個問題,如何建立一個分割槽表,使得包含NULL記錄在單獨的分割槽,而其他記錄在另一個分割槽。
由於NULL的特殊性,任何與NULL的比較結果都是NULL,所以在處理分割槽列的時候有點麻煩。如果要加上NVL、DECODE等函式來處理NULL,則Oracle必須是11g以上的版本,利用虛擬列分割槽的技術才能實現。
由於Oracle在比較的時候認為NULL的值最大,因此解決這個問題其實很容易,只需要在設定分割槽鍵值的時候,將邊界設定的儘可能的大就可以了。
在朋友的需要中,需要分割槽的列是DATE型別。設定DATE型別的分割槽範圍,可以仿照Oracle的物化檢視的例子,將分割槽上限設定為TO_DATE(‘4000-1-1’, ‘YYYY-MM-DD’),或者乾脆將分割槽上限設定為DATE所允許的最大值:
SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
會話已更改。
SQL> create table t_part_range (id number, created date)
2 partition by range (created)
3 (partition p1 values less than (to_date('9999-12-31 23:59:59', 'yyyy-mm-dd hh24:mi:ss')),
4 partition p2 values less than (maxvalue));
表已建立。
SQL> insert into t_part_range values (1, sysdate);
已建立 1 行。
SQL> insert into t_part_range values (2, null);
已建立 1 行。
SQL> select * from t_part_range partition (p1);
ID CREATED
---------- -------------------
1 2009-07-16 15:40:12
SQL> select * from t_part_range partition (p2);
ID CREATED
---------- -------------------
2
對於任何正常的日期資料都能滿足條件,但是如果真的插入這個極限的日期值,就會導致問題:
SQL> insert into t_part_range values (3, to_date('9999-12-31 23:59:59', 'yyyy-mm-dd hh24:mi:ss'));
已建立 1 行。
SQL> select * from t_part_range partition (p2);
ID CREATED
---------- -------------------
2
3 9999-12-31 23:59:59
因此,從嚴謹的角度講,應該選擇列表分割槽方式:
SQL> create table t_part_list (id number, created date)
2 partition by list (created)
3 (partition p1 values (null),
4 partition p2 values (default));
表已建立。
SQL> insert into t_part_list values (1, sysdate);
已建立 1 行。
SQL> insert into t_part_list values (2, null);
已建立 1 行。
SQL> select * from t_part_list partition (p1);
ID CREATED
---------- --------------
2
SQL> select * from t_part_list partition (p2);
ID CREATED
---------- -------------------
1 2009-07-16 16:10:57
只要資料庫版本在Oracle 9.2以上,支援列表分割槽的DEFAULT值,都可以使用這個方法來實現功能。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-609384/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql分割槽nullMySqlNull
- MySQL分割槽, 子分割槽以及對錄入Null值的處理情況MySqlNull
- Seven 儲存結構與磁碟劃分 主分割槽交換分割槽的作用!
- 分割槽儲存管理模擬實驗
- LINUX裝載儲存並分割槽Linux
- MySQL的nnodb引擎表資料分割槽儲存MySql
- 分割槽表及分割槽索引建立示例索引
- MySql建立分割槽MySql
- 建立sawp分割槽
- Oracle 分割槽表的建立Oracle
- 當前EVA4400儲存分割槽情況
- Android(Q)10 上的分割槽外部儲存訪問Android
- 一個bug引發的Android分割槽儲存的思考Android
- Oracle 建立分割槽表Oracle
- Oracle分割槽之五:建立分割槽索引總結Oracle索引
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- 新增儲存用Parted分割槽並建LVM卷LVM
- MySQL的varchar儲存原理:InnoDB記錄儲存結構MySql
- MySQL null值儲存,null效能影響MySqlNull
- Linux 建立swap分割槽Linux
- oracle 建立所有分割槽索引Oracle索引
- Linux dd建立分割槽Linux
- OceaBase 分割槽表建立技巧
- 【學習筆記】分割槽表和分割槽索引——分割槽表的其他管理(三)筆記索引
- Oracle12c:建立主分割槽、子分割槽,實現自動分割槽插入效果Oracle
- 全面學習分割槽表及分割槽索引(6)--建立range-list組合分割槽索引
- MySQL Innodb 儲存結構 & 儲存Null值 解析MySqlNull
- 程式的虛擬地址空間——NULL指標分割槽Null指標
- postgresql 9.6 分割槽表測試方案與記錄SQL
- InnoDB記錄儲存結構
- Linux 分割槽擴容(根分割槽擴容,SWAP 分割槽擴容,掛載新分割槽為目錄)Linux
- 學習筆記】分割槽表和分割槽索引——新增表分割槽(二)筆記索引
- 【學習筆記】分割槽表和分割槽索引——管理索引分割槽(四)筆記索引
- HACCP原理——記錄的儲存(轉載)
- split 分割槽的簡單研究
- 深入學習分割槽表及分割槽索引(5)--建立range-hash組合分割槽(續)索引
- 分割槽表並行建立索引並行索引
- 【實驗】【PARTITION】RANGE分割槽建立