我有一个包含大量数据的大表 - 历史和当前。
我有一个自动作业,可以将旧数据从某些表移到历史表
(然后从源中删除)。
所以我想建立一个
间隔分区
从该表中获取旧数据的表。
问题是源中的base-date-column是这种模式中的varchar2:
2017/07
新表列数据类型必须与源相同。
因此,当我尝试创建区间分区表时,我无法对其进行范围调整。
如果您尝试使用
,则会出现错误TO_DATE
我该怎么办?
这是源表:
void clippingTest(HDC dc, int x, int y, std::wstring const &text, int mode1, int mode2){
SaveDC(dc);
HBRUSH redBrush = CreateSolidBrush(RGB(255, 0, 0));
HBRUSH greenBrush = CreateSolidBrush(RGB(0, 255, 0));
HBRUSH blueBrush = CreateSolidBrush(RGB(0, 0, 255));
LOGFONT lf = {0};
lf.lfHeight = -MulDiv(12, GetDeviceCaps(dc, LOGPIXELSY), 72);
std::wstring const faceName = L"Arial";
wcscpy_s(lf.lfFaceName, LF_FACESIZE, faceName.c_str());
HFONT font = CreateFontIndirect(&lf);
RECT rect = {x, y, x + 700, y + 650};
FillRect(dc, &rect, greenBrush);
BeginPath(dc);
Ellipse(dc, x, y, x + 400, y + 400);
//drawStar(dc, x, y);
EndPath(dc);
SelectClipPath(dc, RGN_COPY);
BeginPath(dc);
Ellipse(dc, x + 300, y, x + 700, y + 400);
//drawStar(dc, x, y);
EndPath(dc);
SelectClipPath(dc, mode1);
BeginPath(dc);
Ellipse(dc, x + 150, y + 250, x + 550, y + 650);
//drawStar(dc, x + 300, y);
EndPath(dc);
SelectClipPath(dc, mode2);
SetPolyFillMode(dc, ALTERNATE);
FillRect(dc, &rect, blueBrush);
BeginPath(dc);
Rectangle(dc, rect.left, rect.top, rect.right, rect.bottom);
EndPath(dc);
SelectClipPath(dc, RGN_COPY);
SelectObject(dc, font);
DrawText(dc, text.c_str(), text.length(), &rect, DT_CENTER | DT_TOP);
RestoreDC(dc, -1);
}
这就是我想要做的但却得到错误:
CREATE TABLE
DATA_01(
APPLICATION VARCHAR2(10 BYTE),
PROCESS VARCHAR2(100 BYTE),
SNAPSHOT_MONTH VARCHAR2(7 BYTE)
);
感谢。
答案 0 :(得分:1)
定义虚拟列并将其用于分区:
CREATE TABLE
HISTORY_01 (
APPLICATION VARCHAR2(10 BYTE) NOT NULL ENABLE,
PROCESS VARCHAR2(100 BYTE),
SNAPSHOT_MONTH VARCHAR2(7 BYTE),
PARTITION_KEY TIMESTAMP GENERATED ALWAYS AS (TO_TIMESTAMP(snapshot_month, 'yyyy/mm')) VIRTUAL
)
PARTITION BY RANGE (PARTITION_KEY)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
PARTITION p_until_01_1900 VALUES LESS THAN (TIMESTAMP '1900-01-01 00:00:00')
);