--大概要求
1、出租车、两客一危、船舶每天一张普通表 如th_gpstrack_20140606
2、出租车两客一危每一小时一张分区表
3、先建完一个月的表,然后每个月15号建好下个月的表
4、建索引 Date_gps、车牌号 、 gid100
create or replace procedure gps_procedure
Authid Current_User
is
tabname varchar2(200);--指定表名生成格式
partime varchar2(200);--两客一危分区时间
partime_cz varchar2(200);--出租车分区时间
dayNum number;--计算下个月共有多少天
firstOfNextMonth date;--下个月的第一天
i number:=1;--th_gpstrack表计数
j number:=1;--TR_GPSTRACK_CZC表计数
k number:=1;--TR_GPSTRACK_Cb表计数
begin
execute immediate 'set role ALL';--此处声明权限,若不声明可能作业在执行该存储过程时会报权限错误
select to_number(TO_char(last_day(add_months(trunc(sysdate),1)),'DD')) into dayNum from dual;
select last_day(add_months(trunc(sysdate),0))+1 into firstOfNextMonth from dual;
/*th_gpstrack表*/
begin
--从下一个月的第一天开始循环建一个月的表及分区及索引
while i<=dayNum loop
select 'th_gpstrack_'||to_char(firstOfNextMonth+(i-1),'yyyymmdd') into tabname from dual;--动态获得表名
select to_char(firstOfNextMonth+(i-1),'yyyy-mm-dd') into partime from dual;--动态获得分区时间
execute immediate 'create table ' ||tabname|| ' (
device_id VARCHAR2(50) not null,
vehiclecolor NUMBER,
encrypt NUMBER default 0 not null,
date_gps DATE not null,
lon NUMBER(11,8) not null,
lat NUMBER(11,8) not null,
direction INTEGER not null,
speed_gps NUMBER(6,1),
speed_trck NUMBER(6,1),
mileage NUMBER(11,1),
state NUMBER,
alarm NUMBER,
altitude NUMBER(6,1),
date_insert DATE default sysdate not null,
gid10 NUMBER,
gid100 NUMBER,
gid1000 NUMBER,
accesscode NUMBER,
key_id VARCHAR2(40) default sys_guid() not null,
old_lon NUMBER,
old_lat NUMBER
)tablespace th_gpstrack_space
PARTITION BY RANGE (date_gps)
(
PARTITION par0_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 00:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par1_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 01:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par2_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 02:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par3_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 03:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par4_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 04:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par5_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 05:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par6_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 06:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par7_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 07:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par8_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 08:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par9_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 09:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par10_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 10:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par11_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 11:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par12_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 12:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par13_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 13:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par14_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 14:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par15_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 15:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par16_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 16:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par17_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 17:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par18_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 18:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par19_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 19:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par20_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 20:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par21_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 21:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par22_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 22:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par23_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime||' 23:00:00'',''yyyy-mm-ddhh24:mi:ss''))
)';
execute immediate 'create index INDEX1_'||tabname|| ' on ' ||tabname|| ' (DATE_GPS) tablespace th_gpstrack_space ';
execute immediate 'create index INDEX2_'||tabname|| ' on ' ||tabname|| ' (DEVICE_ID) tablespace th_gpstrack_space ';
execute immediate 'create index INDEX3_'||tabname|| ' on ' ||tabname|| ' (gid100) tablespace th_gpstrack_space ';
i:=i+1;
end loop;
end;
/*TR_GPSTRACK_CZC表*/
begin
--从下一个月的第一天开始循环建一个月的表及分区及索引
while j<=dayNum loop
select to_char(firstOfNextMonth+(j-1),'yyyy-mm-dd') into partime_cz from dual;--动态获得分区时间
select 'TR_GPSTRACK_CZC_'||to_char(firstOfNextMonth+(j-1),'yyyymmdd') into tabname from dual;--动态获得表名
execute immediate 'create table ' ||tabname|| ' (
id NUMBER not null,
device_id VARCHAR2(50) not null,
vehiclecolor NUMBER,
encrypt NUMBER default 0 not null,
date_gps DATE not null,
lon NUMBER(11,8) not null,
lat NUMBER(11,8) not null,
direction INTEGER not null,
speed_gps NUMBER(6,1),
speed_trck NUMBER(6,1),
mileage NUMBER(11,1),
state NUMBER default 0,
alarm NUMBER default 0,
altitude NUMBER(6,1) default 0,
date_insert DATE default sysdate not null,
gid10 NUMBER,
gid100 NUMBER,
gid1000 NUMBER,
accesscode NUMBER,
old_lon NUMBER,
old_lat NUMBER,
gps_type NUMBER default 0,
zhujian VARCHAR2(100)
)tablespace TR_GPSTRACK_CZC_space
PARTITION BY RANGE (date_gps)
(
PARTITION par0_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 00:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par1_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 01:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par2_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 02:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par3_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 03:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par4_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 04:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par5_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 05:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par6_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 06:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par7_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 07:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par8_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 08:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par9_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 09:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par10_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 10:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par11_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 11:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par12_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 12:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par13_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 13:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par14_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 14:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par15_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 15:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par16_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 16:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par17_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 17:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par18_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 18:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par19_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 19:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par20_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 20:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par21_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 21:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par22_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 22:00:00'',''yyyy-mm-ddhh24:mi:ss'')),
PARTITION par23_'||tabname||' VALUES LESS THAN (TO_DATE('''||partime_cz||' 23:00:00'',''yyyy-mm-ddhh24:mi:ss''))
)';
execute immediate 'create index I1_'||tabname|| ' on ' ||tabname|| ' (DATE_GPS) tablespace TR_GPSTRACK_CZC_space ';
execute immediate 'create index I2_'||tabname|| ' on ' ||tabname|| ' (DEVICE_ID) tablespace TR_GPSTRACK_CZC_space ';
execute immediate 'create index I3_'||tabname|| ' on ' ||tabname|| ' (gid100) tablespace TR_GPSTRACK_CZC_space ';
j:=j+1;
end loop;
end;
/*TR_GPSTRACK_CB表*/
begin
while k<=dayNum loop
select 'tr_gpstrack_cb_'||to_char(firstOfNextMonth+(k-1),'yyyymmdd') into tabname from dual;--指定表名生成格式
execute immediate 'create table ' ||tabname|| ' (
licenseplate VARCHAR2(50) not null,
dtfd_id FLOAT,
updatedate TIMESTAMP(6) not null,
longitude FLOAT,
latitude FLOAT,
speed FLOAT,
direction FLOAT,
bisnew INTEGER,
msg_info VARCHAR2(300),
gnp_jrsh DATE default sysdate,
gps_type NUMBER,
zhsjc DATE default SYSDATE
)tablespace TR_GPSTRACK_CB_space
';
commit;
execute immediate 'create index I1_'||tabname|| ' on ' ||tabname|| ' (updatedate) tablespace TR_GPSTRACK_CB_space';
execute immediate 'create index I2_'||tabname|| ' on ' ||tabname|| ' (licenseplate) tablespace TR_GPSTRACK_CB_space';
k:=k+1;
end loop;
end;
end;