CREATE TABLE "DATASERVER"."SVRSENSORDATA"
( "ID" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,
"SSID" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,
"TYPE" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,
"VALUE" BINARY_DOUBLE DEFAULT 0,
"TIME" TIMESTAMP (3) NOT NULL ENABLE,
)PARTITION BY RANGE (TIME) --以TIME字段做分区条件
(
partition SDP_20140302 values less than (to_date('2014/03/02','YYYY/MM/DD')),
partition SDP_20140303 values less than (to_date('2014/03/03','YYYY/MM/DD')),
partition SDP_20500101 values less than (maxvalue)
);
create or replace
PROCEDURE SVRSENSORDATA_DROPPART(
DaysAmount NUMBER --删除间隔日期
)
AS
v_SqlExec VARCHAR2(2000); --DDL语句变量
--先查找DaysAmount之前的表分区
cursor cursor_part is
select partition_name from user_tab_partitions
WHERE table_name= 'SVRSENSORDATA' AND to_date(SUBSTR(partition_name,5,8),'YYYYMMDD')< sysdate- daysamount order by partition_name;
cursor_oldpart cursor_part%rowType;
begin
open cursor_part;
loop
fetch cursor_part into cursor_oldpart;
exit when cursor_part%notfound;
v_sqlexec:='ALTER TABLE SVRSENSORDATA DROP PARTITION '||cursor_oldpart.partition_name;
DBMS_Utility.Exec_DDL_Statement(v_SqlExec);
end loop;
close cursor_part;
END SVRSENSORDATA_DROPPART;