欢迎投稿

今日深度:

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

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


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 根据日期自动生成分区表

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自动创建分区内容请搜索PHP之友以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP之友!

您可能感兴趣的文章:
  • Oracle表分区详解
  • 详解oracle的分表之表分区的具体使用和示例
  • oracle分区索引的失效和重建代码示例
  • oracle普通表转化为分区表的方法
  • oracle表空间表分区详解及oracle表分区查询使用方法
  • ORACLE 分区表的设计
  • Oracle  range时间范围自动分区的创建方式

www.htsjk.Com true http://www.htsjk.com/oracle/46353.html NewsArticle Oracle使用range分区并根据时间列自动创建分区, Oracle使用range分区,根据时间列自动创建分区 -- Create tablecreate table MY_TEST ( id NUMBER (12) not null, name VARCHAR2 (12) not null, today TIMESTAMP (6) defau...
评论暂时关闭