存储过程作业1

--大概要求

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;

猜你喜欢

转载自programmerwind.iteye.com/blog/2078880
今日推荐