下面是创建分区表:
CREATE TABLE IISPR.HISGPRS_DATA_T
(
SID VARCHAR2(11 BYTE) NOT NULL,
GPS_TIME DATE NOT NULL,
LONGITUDE NUMBER(11,4) DEFAULT 0,
LATITUDE NUMBER(11,4) DEFAULT 0,
ALTITUDE NUMBER(11,4) DEFAULT 0,
VELOCITY NUMBER(7,4) DEFAULT 0,
ANGLE NUMBER(7,4) DEFAULT 0,
ALARM_STATUS NUMBER(8) DEFAULT 0,
SYS_ID NUMBER(38) NOT NULL,
DISC_ID VARCHAR2(11 BYTE),
DISC_TYPE VARCHAR2(11 BYTE),
ROAM_FLAG VARCHAR2(11 BYTE),
DISC_CODE VARCHAR2(11 BYTE),
OWNER_CODE VARCHAR2(11 BYTE),
SEND_FLAG NUMBER(11) DEFAULT 1 NOT NULL,
SEND_TIME DATE,
CREAT_TIME DATE,
MSG_SEQ VARCHAR2(30 BYTE),
GET_FLAG NUMBER(11) DEFAULT 0
)
TABLESPACE TBS_GPRS
PCTUSED 10
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 20M
NEXT 20M
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
PARTITION BY RANGE (GPS_TIME) SUBPARTITION BY HASH (SID)
SUBPARTITIONS 4 STORE IN (TBS_GPRS_SUB_1,TBS_GPRS_SUB_2,TBS_GPRS_SUB_3,TBS_GPRS_SUB_4)
(
PARTITION HISGPRS_B2007 VALUES LESS THAN(TO_DATE('2007-01-01','YYYY-MM-DD'))
NOLOGGING
NOCOMPRESS
PCTUSED 10
PCTFREE 10
INITRANS 1
MAXTRANS 255
)
CACHE
NOLOGGING
NOPARALLEL
NOMONITORING;批量创建最近180天的分区
set serverout on
declare
str varchar2(4000);
i number(4);
begin
for i in 0 .. 180loop
str := 'alter table hisgprs_data_t add partition HISGPRS_'|| to_char(sysdate-i,'yyyymmdd') ||' values less than ( to_date('''|| to_char(sysdate-i+1,'yyyy-mm-dd')||''',''yyyy-mm-dd'')) tablespace TBS_GPRS';
dbms_output.put_line(str);
execute immediate str; end loop;end;
出现下列错误,请问如何修改上述代码:ERROR 位于第 1 行:
ORA-14074: 分区界限必须调整为高于最后一个分区界限
ORA-06512: 在line 9
sysdate-i+1改为 sysdate-180+i 之后执行出现:*
ERROR 位于第 1 行:
ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes
ORA-06512: 在"SYS.DBMS_OUTPUT", line 35
ORA-06512: 在"SYS.DBMS_OUTPUT", line 198
ORA-06512: 在"SYS.DBMS_OUTPUT", line 139
ORA-06512: 在line 8
...
values less than ( to_date('''|| to_char(sysdate-i+1,'yyyy-mm-dd')||''',''yyyy-mm-dd'')) tablespace TBS_GPRS';
...
里面无需先to_char
改成下面还是同样的错误呀:
set serverout on
declare
str varchar2(4000);
i number(4);
begin
for i in 0 .. 180loop
str := 'alter table hisgprs_data_t add partition HISGPRS_'|| to_char(sysdate-180+i,'yyyymmdd') ||' values less than ( to_date('''|| to_char(sysdate-180+i+1,'yyyy-mm-dd')||''',''yyyy-mm-dd'')) tablespace TBS_GPRS';
dbms_output.put_line(str);
execute immediate str; end loop;end;
str := 'alter table hisgprs_data_t add partition HISGPRS_'|| to_char(sysdate-180+i-1,'yyyymmdd') ||' values less than ( to_date('''|| to_char(sysdate-180+i,'yyyy-mm-dd')||''',''yyyy-mm-dd'')) tablespace TBS_GPRS'; 改成这样子试试!