<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    磨刀不誤砍柴工

    合抱之木,生于毫末;九層之臺,起于累土;千里之行,始于足下。

       ::  ::  ::  :: 管理
    1、分區(qū)表創(chuàng)建:
    ????對軌跡表T_TRACK進行組合分區(qū),首選按軌跡時間T_TRACK_TM進行區(qū)間分區(qū),然后,再根據(jù)公司代碼C_COMP_CDE進行列表分區(qū)。

    create?table?T_TRACK??(
    ???N_TRACK_ID???????????
    NUMBER(20)??????????????????????not?null,??
    ???C_COMP_CDE???????????
    VARCHAR2(6),
    ???T_TRACK_TM???????????DATE????????????????????????????
    not?null,
    ???C_CAR_NO?????????????
    VARCHAR2(50)?
    )partition?
    by?range(T_TRACK_TM)
    subpartition?
    by?list(C_COMP_CDE)
    (
    ?????????????partition?P_2009_11?
    values?less?than?(to_date('2009-12-01','yyyy-MM-dd'))
    ?????????????(
    ???????????????????????subpartition?P_2009_11_P1013?
    values('P1013')
    ?????????????)
    );

    2、常用操作語句:


    --添加子分區(qū)
    alter?table?T_TRACK?
    modify?partition?P_2005_01
    add?subpartition?P_2005_01_P1017?values('P1017');

    --添加分區(qū)
    alter?table?T_TRACK?add?partition?P_2005_04?values?less?than(to_date('2005-05-01','yyyy-MM-dd'))
    (
    ????subpartition?P_2005_04_P1013?
    values('P1013'),
    ????subpartition?P_2005_04_P1013?
    values('P1014'),
    ????subpartition?P_2005_04_P1013?
    values('P1015'),
    ????subpartition?P_2005_04_P1013?
    values('P1016')
    )

    --刪除子分區(qū)
    alter?table?T_TRACK?drop?subpartition?p_2005_01_p1017;

    --刪除分區(qū)
    alter?table?T_TRACK?drop?partition?p_2005_04;



    3、書寫ORACLE包封裝創(chuàng)建分區(qū)
    包聲明
    /*
    需要的權(quán)限:
    選擇視圖:dba_tablespace,dba_tab_parition,dba_tab_subpartition
    創(chuàng)建表空間的權(quán)限
    同時,在包體實現(xiàn)中,指明表空間存放路徑
    */

    --包聲明
    create?or?replace?package?GPS_PARTITION?is
    ??
    /*判斷表空間是否已經(jīng)存在*/
    ??
    function?tableSpaceExist(tableSpaceName?varchar2)?return?boolean;??
    ??
    /*創(chuàng)建表空間*/
    ??
    procedure?createTableSpace(tableSpaceName?varchar2);
    ??
    ??
    /*判斷分區(qū)是否存在*/
    ??
    function?partitionExist(tableName?varchar2,partitionName?varchar2)?return?boolean;
    ??
    /*判斷子分區(qū)是否存在*/
    ??
    function?subPartitionExist(tableName?varchar2,subPartitionName?varchar2)?return?boolean;??
    ??
    ??
    /*刪除分區(qū)*/
    ??
    procedure?dropPartition(tableName?varchar2,partitionName?varchar2);
    ??
    /*刪除子分區(qū)*/
    ??
    procedure?dropSubPartition(tableName?varchar2,subPartitionName?varchar2);
    ??
    ??
    --供DBA使用
    ??/*新建當年的分區(qū),供年初始DBA調(diào)用*/
    ??
    procedure?createAYearPartition(tableName?varchar2,startMonth?date);
    ??
    /*新建某月分區(qū)(子分區(qū)按公司分,從公司表中取),供每月DBA調(diào)用*/
    ??
    procedure?addAMonthPartition(tableName?varchar2,theMonth?date);?
    ??
    ??
    ??
    --供應(yīng)用程序調(diào)用
    ??/*新增某公司一年內(nèi)的所有分區(qū)*/
    ??
    procedure?addACompOneYearPartition(tableName?varchar2,startMonth?date,compCde?varchar2);
    ??
    /*新增某公司一月的分區(qū)*/
    ??
    procedure?addACompOneMonthPartition(tableName?varchar2,theMonth?date,compCde?varchar2);
    ?
    ?
    end?GPS_PARTITION;


    包實現(xiàn):
    create?or?replace?package?body?GPS_PARTITION?is
    ??
    /*公司游標*/
    ??
    cursor?corpCursor?is?
    ?????????
    select?distinct(c_comp_cde)?from?t_sys_corp?where?c_is_available='1';??
    ??upperTableName?
    varchar2(80);
    ??upperTableSpaceName?
    varchar2(80);--TS_P1013
    ??upperCompCde?varchar2(5);
    ??tableSpaceDir?
    varchar2(100):='d:\oracle\tbtest\';
    ??
    ??
    /*判斷表空間是否已經(jīng)存在*/
    ??
    function?tableSpaceExist(tableSpaceName?varchar2)?return?boolean?is????
    ??resultNum?
    number?:=0;
    ??
    ??
    begin
    ???????????upperTableSpaceName?:
    =?UPPER(tableSpaceName);
    ?????????????resultNum:
    =0;
    ???????????dbms_output.put_line(
    '判斷表空間'||upperTableSpaceName||'是否存在:');
    ???????????
    select?count(*)?into?resultNum?from?dba_tablespaces?where?tablespace_name=upperTableSpaceName;
    ???????????dbms_output.put_line(
    '結(jié)果是(大于0存在,小于0不存在):'||resultNum);
    ???????????
    if?(resultNum>0)?then
    ?????????????
    return?true;
    ???????????
    else
    ?????????????
    return?false;
    ???????????
    end?if;???
    ??
    end;
    ??
    ??
    /*創(chuàng)建表空間*/
    ??
    procedure?createTableSpace(tableSpaceName?varchar2)
    ??
    is?
    ??tablespaceSql?
    varchar2(500);
    ??
    begin
    ????????tablespaceSql:
    ='create?tablespace?'||tableSpaceName||'?datafile?'''?||
    ????????tableSpaceDir
    ||tableSpaceName||'.dbf'''||'?size?10M?reuse?default?storage(initial?512K?next?512K?minextents?8?maxextents?4096?pctincrease?0)?online?permanent';???
    ????????dbms_output.put_line(tablespaceSql);
    ????????
    execute?immediate?tablespaceSql;
    ??
    end;
    ??
    ??
    /*判斷分區(qū)是否存在*/
    ??
    function?partitionExist(tableName?varchar2,partitionName?varchar2)?return?boolean?is
    ??resultNum?
    number?:=0;
    ??
    begin
    ???????????upperTableName?:
    =?UPPER(tableName);
    ?????????????dbms_output.put_line(
    '判斷分區(qū)'||partitionName||'在表'||tableName||'中是否存在:');
    ???????????resultNum:
    =0;
    ???????????
    select?count(*)?into?resultNum?from?dba_tab_subpartitions?where?partition_name=partitionName?and?table_name=upperTableName;??????
    ???????????dbms_output.put_line(
    'select?count(*)?into?resultNum?from?dba_tab_subpartitions?where?partition_name='||partitionName||'?and?table_name='||upperTableName);
    ???????????dbms_output.put_line(
    '結(jié)果是(大于0存在,小于0不存在):'||resultNum);
    ???????????
    if?(resultNum>0)?then
    ?????????????
    return?true;
    ???????????
    else
    ?????????????
    return?false;
    ???????????
    end?if;?
    ??
    end;
    ??
    ??
    /*判斷子分區(qū)是否存在*/
    ??
    function?subPartitionExist(tableName?varchar2,subPartitionName?varchar2)?return?boolean
    ??
    is
    ??resultNum?
    number?:=0;
    ??
    begin
    ???????upperTableName?:
    =?UPPER(tableName);??????????
    ???????????dbms_output.put_line(
    '判斷子分區(qū)'||subPartitionName||'在表'||tableName||'中是否存在:');
    ???????????resultNum:
    =0;
    ???????????
    select?count(*)?into?resultNum?from?dba_tab_subpartitions?where?table_name=upperTableName?and?subpartition_name=subPartitionName;?????
    ???????????dbms_output.put_line(
    'select?count(*)?into?resultNum?from?dba_tab_subpartitions?where?subpartition_name='||subPartitionName||'?and?table_name='||upperTableName);
    ???????????dbms_output.put_line(
    '結(jié)果是(大于0存在,小于0不存在):'||resultNum);
    ???????????
    ???????????
    if?(resultNum>0)?then
    ?????????????
    return?true;
    ???????????
    else
    ?????????????
    return?false;
    ???????????
    end?if;?
    ??
    end;
    ???
    /*刪除分區(qū)*/
    ??
    procedure?dropPartition(tableName?varchar2,partitionName?varchar2)
    ??
    is
    ??
    begin??????
    ??upperTableName?:
    =?UPPER(tableName);
    ????????????
    execute?immediate?
    ????????????
    'alter?table?'||upperTableName||'drop?partition'||partitionName;
    ??
    end;
    ??
    ??
    /*刪除子分區(qū)*/
    ??
    procedure?dropSubPartition(tableName?varchar2,subPartitionName?varchar2)
    ??
    is
    ??
    begin
    ??upperTableName?:
    =?UPPER(tableName);
    ????????????
    execute?immediate?
    ????????????
    'alter?table?'||upperTableName||'drop?subpartition'||subPartitionName;
    ??
    end;
    ??
    ??
    ??
    /*新建當年的分區(qū),供年初始DBA調(diào)用*/
    ??
    procedure?createAYearPartition(tableName?varchar2,startMonth?date)
    ??
    is
    ??monthNum?
    number;?
    ??theMonth?date;
    ??
    begin
    ??upperTableName?:
    =?UPPER(tableName);
    ????????theMonth?:
    =?startMonth;
    ????????????????
    ????????monthNum?:
    =?to_char(startMonth,'MM');
    ????????
    while?monthNum12?loop?
    ??????????????addAMonthPartition(upperTableName,theMonth);
    ??????????????theMonth?:
    =?theMonth+numtoyminterval(1,'month');
    ??????????????monthNum?:
    =?to_char(theMonth,'MM');
    ????????
    end?loop;????
    ????????
    ????????
    if?monthNum=12?then
    ???????????addAMonthPartition(upperTableName,theMonth);
    ????????
    end?if;????
    ??
    end;
    ??
    ??
    ??
    /*新建某月分區(qū)(子分區(qū)按公司分,從公司表中取),供每月DBA調(diào)用*/
    ??
    procedure?addAMonthPartition(tableName?varchar2,theMonth?date)
    ??
    is
    ????????????
    ????????????compCde?
    varchar2(5);
    ????????????
    ??
    begin
    ??????upperTableName?:
    =?UPPER(tableName);??????
    ????????????
    ????????????
    if?corpCursor%ISOPEN?then
    ?????????????????
    close?corpCursor;???
    ????????????
    end?if;???????
    ????????????
    open?corpCursor;
    ????????????
    ????????????
    fetch?corpCursor?into?compCde;
    ????????????
    if?corpCursor%found?then
    ???????????????addACompOneMonthPartition(tableName,theMonth,compCde);
    ????????????
    end?if;
    ?????????????
    while?corpCursor%found?loop
    ??????????????????
    fetch?corpCursor?into?compCde;
    ???????????
    ??????????????????
    if?corpCursor%found?then
    ??????????????????????addACompOneMonthPartition(tableName,theMonth,compCde);
    ??????????????????
    end?if;
    ??????????????????????
    ????????????
    end?loop;
    ????????????
    close?corpCursor;
    ????????????
    ????????????
    ??
    end;
    ??
    ??
    /*新增某公司一月的分區(qū)*/
    ??
    procedure?addACompOneMonthPartition(tableName?varchar2,theMonth?date,compCde?varchar2)
    ??
    is
    ????????????yearStr?
    varchar2(4);--
    ????????????monthNum?number;??--
    ????????????partitionName?varchar2(9);--P_2009_12
    ????????????subPartitionName?varchar2(15);--P_2009_12_P1013
    ????????????maxDate?varchar2(10);
    ????????????sqlStr?
    varchar2(2000);--要執(zhí)行的SQL語句
    ??????
    ??
    begin?????
    ????????????yearStr:
    =to_char(theMonth,'yyyy');??
    ????????????
    ????????????upperTableName?:
    =?UPPER(tableName);
    ????????????upperCompCde?:
    =?UPPER(compCde);
    ????????????upperTableSpaceName?:
    =?'TS_'||upperCompCde||'_'||yearStr;
    ????????????
    ????????????
    if?not?tableSpaceExist(upperTableSpaceName)?then
    ???????????????createTableSpace(upperTableSpaceName);
    ????????????
    end?if;
    ????????????
    ????????????
    ????????????yearStr:
    =to_char(theMonth,'yyyy');??
    ????????????monthNum?:
    =?to_char(theMonth,'MM');
    ????????????
    if?monthNum=12?then
    ???????????????maxDate:
    =yearStr+1;
    ???????????????maxDate:
    =maxDate||'-01'||'-01';
    ????????????
    else
    ???????????????maxDate:
    =yearStr||'-'||lpad((monthNum+1),2,'0')||'-01';
    ????????????
    end?if;?
    ????????????
    ????????????partitionName:
    ='P_'||yearStr||'_'||lpad((monthNum),2,'0');
    ????????????subPartitionName:
    =partitionName||'_'||upperCompCde;
    ???????????
    ????????????
    ????????????
    if?partitionExist(upperTableName,partitionName)?then???????????????
    ???????????????
    --分區(qū)存在???????????????
    ???????????????if?not?subPartitionExist(upperTableName,subPartitionName)?then
    ??????????????????sqlStr:
    ='alter?table?'||upperTableName||'?modify?partition?'||partitionName
    ?????????????????????????????
    ||'?add?subpartition?'||subPartitionName||'?values('''||upperCompCde||''')?tablespace?'||upperTableSpaceName;
    ???????????????
    end?if;
    ????????????
    else
    ???????????????
    --分區(qū)不存在???????????????
    ???????????????sqlStr:='alter?table?'||upperTableName||'?add?partition?'||partitionName
    ???????????????????????????
    ||'?values?less?than(to_date('''||maxDate||''',''yyyy-MM-dd''))('
    ???????????????????????????
    ||'?subpartition?'||subPartitionName||'?values('''||upperCompCde||''')'||'?tablespace?'||upperTableSpaceName||'?)';
    ???????????????
    ????????????
    end?if;
    ????????????
    ????????????
    ????????????
    if?length(sqlStr)>0?then
    ???????????????dbms_output.put_line(
    '執(zhí)行創(chuàng)建分區(qū)或子分區(qū)語句:'||sqlStr);
    ???????????????
    execute?immediate?sqlStr;
    ????????????
    end?if;
    ??
    end;
    ??
    ????
    ??
    /*新增某公司一年內(nèi)的所有分區(qū)*/
    ??
    procedure?addACompOneYearPartition(tableName?varchar2,startMonth?date,compCde?varchar2)
    ??
    is
    ??monthNum?
    number;?
    ??theMonth?date;
    ??
    begin
    ????????upperTableName?:
    =?UPPER(tableName);?
    ????????upperCompCde?:
    =?UPPER(compCde);
    ????????theMonth?:
    =?startMonth;
    ????????????????
    ????????monthNum?:
    =?to_char(startMonth,'MM');
    ????????
    while?monthNum12?loop?
    ??????????????addACompOneMonthPartition(upperTableName,theMonth,compCde);
    ??????????????theMonth?:
    =?theMonth+numtoyminterval(1,'month');
    ??????????????monthNum?:
    =?to_char(theMonth,'MM');
    ????????
    end?loop;????
    ????????
    ????????
    if?monthNum=12?then
    ???????????addACompOneMonthPartition(upperTableName,theMonth,compCde);
    ????????
    end?if;????
    ??
    end;?
    end?GPS_PARTITION;

    ?

    4.新增公司時,通過IBATIS調(diào)用存儲過程為此公司添加一年的分區(qū)

    /**
    ?????*?為公司添加軌跡表一年的分區(qū)
    ?????*?
    @param?compCde
    ?????*?
    @param?date
    ?????*?
    @throws?Exception?
    ?????
    */

    ????
    public?static?void?addACompOneYearPartition(String?compCde,String?date,DAOBase?dao)?throws?Exception{
    ????????
    ????????Map
    String,String>?keys?=?new?HashMapString,String>();
    ????????keys.put(
    "tableName",?"T_GPS_TRACK");
    ????????keys.put(
    "compCde",?compCde);
    ????????keys.put(
    "theMonth",?date);
    ????????
    ????????dao.doView(
    "track.addACompOneYearPartition",?keys);
    ????}



    IBATIS配置文件:

    parameterMap?id="partitionParam"?class="java.util.Map">
    ????????
    parameter?property="tableName"?jdbcType="VARCHAR"?javaType="java.lang.String"?mode="IN"?/>
    ????????
    parameter?property="theMonth"?jdbcType="DATE"?javaType="java.lang.String"?mode="IN"?/>
    ????????
    parameter?property="compCde"?jdbcType="VARCHAR"?javaType="java.lang.String"?mode="IN"?/>????????
    ?????
    span style="color: #800000">parameterMap>


    procedure?id="addACompOneYearPartition"?parameterMap="partitionParam">
    ???????{call?gps_partition.addACompOneYearPartition(?,to_date(?,'yyyy-MM-dd'),?)}
    ????
    span style="color: #800000">procedure>?


    5、查詢表中數(shù)據(jù)時,傳入分區(qū):
    /**
    ?????*?取得最靠近(
    =)某時間點的終端的軌跡
    ?????*?@param?
    temiId
    ?????*?@param?theDate
    ?????*?@return
    ?????*?@throws?Exception?
    ?????*/
    ????public?Track?getCloserLeftTrack(String?temiId,
    ????????????String?theDate,String?compCde)?throws?Exception?{
    ????????
    ????????
    ????????Map
    >?keys?=?new?HashMapString,?String>();
    ????????keys.put("temiId",?temiId);
    ????????keys.put("theDate",?theDate);
    ????????keys.put("subPartitionName",?TrackPatitionUtils.getSubPartitionName(compCde,?theDate));
    ????????Object?obj?=??dao.doView("track.getCloserLeftTrack",?keys);
    ????????if(obj!=null)
    ????????????return?(Track)?obj;
    ????????return?null;
    ????}

    ?

    ?

    /**
    ?????*?取子分區(qū)名稱
    ?????*?格式:P_YYYY_MM_COMPCDE?(如:P_2009_12_P3456)?
    ?????*?@param?compCde?公司代碼
    ?????*?@param?date
    ?????*?@return
    ?????*?@throws?ParseException?
    ?????*/
    ????public?static?String?getSubPartitionName(String?compCde,String?date)?throws?ParseException{
    ????????Assert.notNullAndEmpty(compCde,?"取軌跡表分區(qū)名稱,公司代碼不能為空!");
    ????????????????
    ????????return?getPartitionName(date)+"_"+compCde;
    ????}
    ????
    ????/**
    ?????*?取分區(qū)名稱
    ?????*?格式:P_YYYY_MM(如:P_2009_12)
    ?????*?@param?date
    ?????*?@return
    ?????*?@throws?ParseException?
    ?????*/
    ????public?static?String?getPartitionName(String?date)?throws?ParseException{
    ????????
    ????????Assert.notNullAndEmpty(date,?"取軌跡表分區(qū)名稱,時間不能為空!");????????
    ????????date?=?DateUtils.format(DateUtils.parse(date,?"yyyy-MM-dd"),?"yyyy_MM");
    ????????
    ????????return?"P_"+date;
    ????}


    ?

    select?*?from?T_GPS_TRACK?
    ????????
    isNotEmpty?property="subPartitionName"?close="?"?open="?">
    ??????????????subpartition($subPartitionName$)
    ????????
    span style="color: #800000">isNotEmpty>
    ????????
    isEmpty?property="subPartitionName">
    ?????????????
    isNotEmpty?property="patitionName"?close="?"?open="?">
    ??????????????????partition($patitionName$)
    ?????????????
    span style="color: #800000">isNotEmpty>
    ????????
    span style="color: #800000">isEmpty>
    ????????where?c_device_no=#deviceNo#?


    ?

    posted on 2009-12-27 00:46 liwei5891 閱讀(1488) 評論(0)  編輯  收藏 所屬分類: Oracle

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 中国亚洲女人69内射少妇| 2019中文字幕在线电影免费 | 白白色免费在线视频| 美女视频黄频a免费| 国产成人精品免费视频大全| 99久久免费国产特黄| 久久午夜羞羞影院免费观看| 中文字幕av无码无卡免费| 国产精品jizz在线观看免费| 国产亚洲欧洲Aⅴ综合一区 | 亚洲美女在线国产| 亚洲福利视频一区| 亚洲男人天堂2018av| 国产亚洲精品第一综合| 国产综合免费精品久久久| 亚洲免费中文字幕| 国产精品国产免费无码专区不卡 | 国产精品免费在线播放| 无码人妻AV免费一区二区三区| 免费精品国产自产拍在线观看图片 | 成人免费午夜在线观看| 亚洲国产一区二区视频网站| 亚洲AV无码成人精品区在线观看| 亚洲人成高清在线播放| 老湿机一区午夜精品免费福利| 国产一区二区免费| 成人午夜免费福利| 亚洲精品亚洲人成在线观看| 亚洲国产综合精品| 边摸边吃奶边做爽免费视频99| 午夜影院免费观看| 国产男女猛烈无遮挡免费网站 | 亚洲精品成人网久久久久久| 亚洲黄色片免费看| 深夜福利在线视频免费| 久久久久久精品免费免费自慰| www亚洲一级视频com| 亚洲国产日韩在线成人蜜芽| a高清免费毛片久久| 成人片黄网站A毛片免费| 久久久久亚洲AV成人无码|