自动分区方式
-- 该方式为区间分区,系统每天自动生成新的分区,无需手动增加分区,但是无法自定义分区名
-- 假设有一个交易表,包含列 transaction_id, transaction_date 等
CREATE TABLE transactions (
transaction_id NUMBER PRIMARY KEY,
transaction_date DATE NOT NULL,
-- 其他列...
)
PARTITION BY RANGE (transaction_date) INTERVAL (INTERVAL '1' DAY) (
PARTITION transactions_20240101 VALUES LESS THAN (DATE '2024-01-02')
);
手动增加分区
-- 范围分区,手动增加分区,可设定分区名称
CREATE TABLE transactions (
transaction_id NUMBER PRIMARY KEY,
transaction_date DATE NOT NULL,
-- 其他列...
)
PARTITION BY RANGE (transaction_date)(
PARTITION transactions_20240101 VALUES LESS THAN (TO_DATE('20240101', 'YYYYMMDD'))
);
-- 预先创建一年的分区(从2024年1月2日到2025年1月1日)
DECLARE
v_start DATE := DATE '2024-01-02';
v_end DATE := ADD_MONTHS(v_start, 12);
BEGIN
WHILE v_start < v_end LOOP
EXECUTE IMMEDIATE 'ALTER TABLE transactions ADD PARTITION transactions_' || TO_CHAR(v_start, 'YYYYMMDD') || ' VALUES LESS THAN (TO_DATE(''' || TO_CHAR(v_start + 1, 'YYYY-MM-DD') || ''', ''YYYY-MM-DD''))';
v_start := v_start + INTERVAL '1' DAY;
END LOOP;
END;