oracle11g中引入了間隔分區的功能,通過該功能,可以在輸入相應分區的數據時自動創建相應的分區。
在達夢中我們也可以使用間隔分區,不過需要注意的是達夢中的間隔分區使用有以下限制:
- 僅支持一級範圍分區創建間隔分區;
- 只能有一個分區列,且分區列類型爲日期或數值;
- 對間隔分區進行SPLIT,只能在間隔範圍內進行操作;
- 被SPLIT/MERGE的分區,其左側分區不再進行自動創建;
- 不相鄰的間隔的分區,不能MERGE;
- 表定義不能包含MAXVALUE分區;
- 不允許新增分區;
- 不能刪除起始間隔分區;
- 間隔分區表定義語句顯示到起始間隔分區爲止;
- 自動生成的間隔分區,均不包含邊界值;
- 間隔表達式只能爲常量或日期間隔函數。日期間隔函數爲:NUMTOYMINTERVALNUMTODSINTERVAL;數值常量可以爲整型、DEC
類型; - MPP 下不支持間隔分區表。
例子:
1、按年/月創建分區,使用NUMTOYMINTERVAL函數:
SQL> CREATE TABLE t_interval1
2 (
3 employee_id NUMBER,
4 employee_name VARCHAR2(20),
5 birthday DATE
)
6 7 PARTITION BY RANGE(birthday)
8 INTERVAL (NUMTOYMINTERVAL(1,'year'))
9 (
10 PARTITION partition2014 VALUES LESS THAN(to_date('2019-01-01','yyyy-mm-dd')),
PARTITION partition2015 VALUES LESS THAN(to_date('2020-01-02','yyyy-mm-dd'))
);
11 12 操作已執行
已用時間: 3.698(毫秒). 執行號:5.
2、按日創建分區,使用NUMTODSINTERVAL函數:
這裏需要注意:
如果在達夢中沒有設置COMPATIBLE_MODE參數爲2,即兼容oracle的模式,那麼創建按日分區時如果分區列使用date類型會出現報錯:
而使用timestamp類型則不會報錯:
但是爲了兼容oracle,這裏我們還是建議修改COMPATIBLE_MODE參數,然後就可以在date類型列上按照天來分區了:
SQL> create table sales
2 (
sales_id number,
sales_dt date
)
3 4 5 6 partition by range (sales_dt)
7 INTERVAL (NUMTODSINTERVAL(1,'day'))
8 (
9 partition p090101 values less than (to_date('2020-06-30','yyyy-mm-dd'))
10 );
操作已執行
已用時間: 5.252(毫秒). 執行號:4.