在Oracle表中,将有两列,
Col_1, Col_2
我希望在这些列上单独创建分区(不是单个多列分区)。
即。不是Col_1
条件下的单个分区,而是Col_2
上的单独分区和{{1}}上的单独分区。
这可能吗?
谢谢!
答案 0 :(得分:1)
我认为Oracle不可能在表上拥有> 1分区。只有分区和子分区。 希望它有所帮助。
答案 1 :(得分:1)
在Oracle中,分区始终由ROW完成,基于1或2列作为分区键。如果你使用2列,你就有了一个复合分区键。分区和分配。
从那时起,如果您拥有分区键col_1
和col_2
或col_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
不同的段中。
但明确声明:我不建议使用任何这些变通办法!