两列上有两个独立的分区

时间:2017-12-21 17:56:08

标签: oracle partitioning oracle12c

在Oracle表中,将有两列,

Col_1, Col_2

我希望在这些列上单独创建分区(不是单个多列分区)。

即。不是Col_1条件下的单个分区,而是Col_2上的单独分区和{{1}}上的单独分区。

这可能吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为Oracle不可能在表上拥有> 1分区。只有分区和子分区。 希望它有所帮助。

答案 1 :(得分:1)

在Oracle中,分区始终由ROW完成,基于1或2列作为分区键。如果你使用2列,你就有了一个复合分区键。分区和分配。

从那时起,如果您拥有分区键col_1col_2col_1 || col_2,它就不会有任何区别 - 尽管它会是非常糟糕的主意连接日期字符串!

所以,它不可能,但解决方法可能是使用这样的嵌套表:

CREATE OR REPLACE TYPE TS_TABLE_TYPE AS TABLE OF TIMESTAMP(3);

CREATE TABLE my_table (
    col_1 DATE,
    col_2 TS_TABLE_TYPE)
NESTED TABLE col_2 STORE AS NT_TS_TABLE_TYPE (TABLESPACE TABLESPACE_A)
TABLESPACE TABLESPACE_B;

INSERT INTO MY_TABLE (col_1, col_2) 
   VALUES (SYSDATE, TS_TABLE_TYPE(SYSTIMESTAMP));

col_1将存储在与col_2不同的段中,因此它们甚至可以存储在不同的文件系统中,但从逻辑上讲,它看起来像是一个单独的表。

但是,我认为这是一个相当糟糕的解决方法。另一个非常糟糕的解决方法是使用CLOB:

CREATE TABLE MY_TABLE (
    col_1 DATE, 
    col_2 CLOB CHECK (REGEXP_LIKE(col_2, '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d*$'))
    )
LOB (col_2) STORE AS SECUREFILE (TABLESPACE TABLESPACE_A DISABLE STORAGE IN ROW)
TABLESPACE TABLESPACE_B;

INSERT INTO MY_TABLE (col_1, col_2) 
   VALUES (SYSDATE,TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF'));

同样,col_1将存储在与col_2不同的段中。

但明确声明:我不建议使用任何这些变通办法!