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

2023-12-04 0 294

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

— Create table
create 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_SAMS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 1M
next 1M
minextents 1
maxextents unlimited
)
);
– – Add comments to the table
comment on table MY_TEST
is ‘测试表\’;
Add comments to the columns
comment on column MY_TEST.id
is ‘主键id\’;
comment on column MY_TEST.name
is ‘名称\’;
comment on column MY_TEST.today
is ‘时间\’;

– – Create/Recreate indexes
create index MY_TEST_INDEX on MY_TEST (id)
tablespace TB_SAMS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
– -Grant/Revoke object privileges
grant 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使用range分区并根据时间列自动创建分区

附录: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’)

numtoyminterval 与numtodsinterval函数类似,将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自动创建分区内容请搜索悠久资源以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Oracle Oracle使用range分区并根据时间列自动创建分区 https://www.u-9.cn/database/oracle/67957.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务