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觸發器。
如果沒有開啟這個選項,就會在更新時報錯。