您的位置:首页技术文章
文章详情页

Oracle使用range分区并根据时间列自动创建分区

【字号: 日期:2023-05-30 16:13:54浏览:26作者:猪猪

Oracle使用range分区,根据时间列自动创建分区

-- Create tablecreate table MY_TEST (    id    NUMBER (12) not null,    name    VARCHAR2 (12) not null,    today    TIMESTAMP (6) default SYSDATE)partition by range (today) interval(numtodsinterval(1,"day")) --月分区用month,年分区用year(    partition P_20230411 values less than (TO_DATE("2023-04-12 00:00:00,"SYYYY-MM-DD HH24:MI:SS"))tablespace TB_SAMSpctfree 10initrans 1maxtrans 255storage(    initial 1M    next 1M    minextents 1    maxextents unlimited));- - Add comments to the tablecomment on table MY_TEST    is ‘测试表";Add comments to the columnscomment on column MY_TEST.id    is ‘主键id";comment on column MY_TEST.name    is ‘名称";comment on column MY_TEST.today    is ‘时间";- - Create/Recreate indexescreate index MY_TEST_INDEX on MY_TEST (id)    tablespace TB_SAMS    pctfree 10    initrans 2    maxtrans 255    storage    (initial 64Knext 1Mminextents 1maxextents unlimited);- -Grant/Revoke object privilegesgrant select on MY_TEST to DBVIEW;INSERT INTO MY_TEST VALUES (1,"xxc1",SYSDATE);INSERT INTO MY_TEST VALUES (2,"xxc2"‚SYSDATE+1);INSERT INTO MY_TEST VAIUES (3,"xxc3",SYSDATE+2) ;

测试效果

附录:oracle 根据日期自动生成分区表

oracle 根据日期自动生成分区表

CREATE TABLE my_table (  id NUMBER,  name VARCHAR2(50),  created_date DATE)PARTITION BY RANGE (created_date) INTERVAL (NUMTODSINTERVAL(1, "DAY"))(  PARTITION p1 VALUES LESS THAN (TO_DATE("2022-01-01", "YYYY-MM-DD")));

其中:

numtodsinterval(,) ,x是一个数字,c是一个字符串,
表明x的单位,这个函数把x转为interval day to second数据类型

常用的单位有 (‘day’,‘hour’,‘minute’,‘second’)

numtoymintervalnumtodsinterval函数类似,将x转为interval year to month数据类型

常用的单位有(‘year’,‘month’)

格式:NumToYMInterval(n, interval_unit);

n: 数值类型

interval_unit: ‘YEAR’, ‘MONTH’ ,或其他可以转换成这两个值之一的表达式

NumToYMInterval(1, ‘YEAR’) :一年后的间隔

NumToYMInterval(-1, ‘MONTH’): 一个月前

小数会被计算成整数后,再做计算:

select sysdate + numtoyminterval(0.1, "MONTH")  from dual;2023-03-21 09:54:37

如果执行含有函数的sql时报错:”INTERVAL YEAR TO MONTH literal“。不能与数值做运算。

常用用途:

做日期运算时,这个函数非常有用。例如:取一个月后的日期:

select sysdate + NumToYMInterval(1, "MONTH") from dual;

到此这篇关于Oracle使用range分区并根据时间列自动创建分区的文章就介绍到这了,更多相关Oracle自动创建分区内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

标签: Oracle