numtoyminterval和numtoyminterval是日期转换函数,
作用:可以将数字转换成相应的日期单位时间
1.NUMTOYMINTERVAL ( n , 'char_expr' ) char_expr:日期描述,可以是YEAR和MONTH。
通常当我们使用add_month添加月时,如果输入是本月月底的日期,那么得到的也是月底的日期,
比如add_month(to_date('2007-02-28','yyyy-mm-dd'),1)得到的就会是'2007-03-31',而不是'2007-03-28'。
此时,如果使用的是to_date('2007-02-28','yyyy-mm-dd')+numtoyminterval(1,'month'),那么得到的就是'2007-03-28'。
2. numtodsinterval的用法和numtoyminterval一样只是他的参数为day、hour、minute、second。
Oracle 11g之前,维护分区需要手工。11g之后使用interval来实现自动扩展分区,简化了维护。 根据年: INTERVAL(NUMTOYMINTERVAL(1,'YEAR')) 根据月: INTERVAL(NUMTOYMINTERVAL(1,'MONTH')) 根据天: INTERVAL(NUMTODSINTERVAL(1,'DAY')) 根据时分秒: NUMTODSINTERVAL( n, { 'DAY'|'HOUR'|'MINUTE'|'SECOND'})
create table SYS_LOG_TEST ( id VARCHAR2(64) not null, log_type VARCHAR2(64), title NVARCHAR2(500), create_by VARCHAR2(64), create_date TIMESTAMP(6), remote_addr VARCHAR2(255), user_agent VARCHAR2(255), request_uri VARCHAR2(255), method VARCHAR2(5), params CLOB, exception CLOB, operate_type VARCHAR2(64), content CLOB, PRIMARY KEY (ID) ) partition by range(create_date) INTERVAL(NUMTODSINTERVAL(1,'HOUR')) (PARTITION p0 VALUES LESS THAN (TIMESTAMP'2018-05-06 14:30:00'));
3.该段代码表示:
1).创建的表SYS_LOG_TEST
2).创建了默认分区表p0,insert 数据时,create_date 小于 '2000-05-06' 的所有数据都存储在 p0 分区表中
3).做到了自动创建分区表的功能,(TIMESTAMP'2018-05-06 14:30:00') 按小时自动分区
即如果 date_time 的年月找不到已有分区,则自动创建新的分区
根据分区表查询语句类似:select * from SYS_LOG_TEST partition (p0);
采用自动创建分区优缺点
优点:可以根据实际情况,自动创建分区
缺点:创建的分区表名称无法指定(目前我研究的范围内,无法指定),系统自动默认生成类似SYS_P27的分区表名
自动创建的分区表可以在oracle系统自带的表中查询到自己的分区表名称
语句如下: select * from dba_tab_partitions where table_name='SYS_LOG_TEST'
该语句可以查询到SYS_LOG_TEST 下面的所有分区表信息,
如果非要根据分区条件找到对应的分区表名称,只能 通过 系统表 dba_tab_partitions 中的High_value 字段,
截取相关字符串匹配条件找出Partition_Name
//update DPHOMEWMS.WMS_OPERATION_RECORD set OPERATION_TIME = sysdate where OPERATION_TIME is null; insert into SYS_LOG_TEST select * from SYS_LOG; drop table SYS_LOG; alter table SYS_LOG_TEST rename to SYS_LOG; alter table SYS_LOG enable row movement;
alter table SYS_LOG enable row movement; 是指允许分区表的分区键是可更新,当某一行更新时,如果更新的是分区列,并且更新后的列值不属于原来的这个分区,
如果开启了这个选项,就会把这行从这个分区中delete掉,并加到更新后所属的分区,此时就会发生rowid的改变。相当于一个隐式的delete+insert,但是不会触发insert/delete触发器。
如果没有开启这个选项,就会在更新时报错。