• 传入时间按月分区并创建每月表空间



    --1 创建每个索引分区依存的表空间
    declare

      v_ts        varchar2(40);
      v_indts     varchar2(40);
      v_mxtabts   varchar2(40); --明细数据表空间
      v_mxindts   varchar2(40); --明细索引表空间

      t_mon       date; --把传入值 转换为 日期  传入格式:201609
      t_mon1      varchar2(2000);
      t_qssj      date; --把传入起始时间 转换为 日期  格式:201609
      t_zzsj      date; --把传入终止时间 转换为 日期  格式:201609
      c_thismonth char(4); --取出当前月
      c_nextmonth char(4); --取出下个月
      v_sql       varchar2(2000); --要执行的sql语句
      c_str01    varchar2(2000);
      c_str02       varchar2(2000);
     
    begin

      dbms_output.put_line('First is starting');

      t_qssj := to_date('&qssj', 'yyyymm'); --传入参数  起始时间 01-8 月 -16
      t_zzsj := to_date('&zzsj', 'yyyymm'); --插入参数  终止时间 01-9 月 -16

      if to_char(t_qssj, 'yyyymm') <> '&qssj' --判断传入的  起始时间、终止时间是否合法
         or to_char(t_zzsj, 'yyyymm') <> '&zzsj' then
        dbms_output.put_line('----------------------------------------');
        dbms_output.put_line('错误: 输入的月份格式必须为''YYYYMM''');

      end if;

      --if t_qssj <= trunc(sysdate,'mm') then
      --    dbms_output.put_line('----------------------------------------');
      --    dbms_output.put_line('错误: 起始月必须大于当前月份');
      --    goto endproc;
      --end if;

      if '&zzsj' < '&qssj' then
        --如果插入的 终止时间 小于 起始时间 ,退出
        dbms_output.put_line('----------------------------------------');
        dbms_output.put_line('错误: 终止月必须大于起始月');

      end if;

      t_mon := to_date('&qssj', 'yyyymm'); --把传入值 转换为 日期  输出格式:01-8月 -16
      dbms_output.put_line('t_mon is ' || t_mon);
      c_nextmonth := to_char(t_mon, 'yymm'); --转换的日期 转换为字符串  输出格式:01-8月 -16
      dbms_output.put_line('c_nextmonth is ' || c_nextmonth);

      loop
        c_thismonth := c_nextmonth; --取出 当前月份 输出格式:1608    char
        dbms_output.put_line('c_thismonth is ' || c_thismonth);
        t_mon := add_months(t_mon, 1); --传入值递增一个月 输出格式:01-9月 -16
        t_mon1:=to_char(t_mon,'yyyy-mm-dd hh24:mi:ss');
        dbms_output.put_line('t_mon is ' || t_mon);
        dbms_output.put_line('t_mon1 is '||to_char(t_mon,'yyyy-mm-dd hh24:mi:ss'));
        c_nextmonth := to_char(t_mon, 'yymm'); --取出递增一个月后的字符串 输出格式:1608   字符串
        dbms_output.put_line('c_nextmonth is ' || c_nextmonth);
        -- 明细表空间名                                     
        v_mxtabts := 'lvsksk_t_m_' || c_thismonth; --拼接明细表空间名 如:lvsksk_t_m_1608
        dbms_output.put_line('v_mxtabts is ' || v_mxtabts);
        -- 明细索引空间名                                   
        v_mxindts := 'lvsksk_i_m_' || c_thismonth; --拼接明细索引表空间名 如: lvsksk_i_m_1608
        dbms_output.put_line('v_mxindts is ' || v_mxindts);
        
      --  c_str02:=c_str02||'partition  p'||c_thismonth   ||' values less than ('||t_mon||')    tablespace ' ||v_mxindts||','||chr(10) ;
        c_str02:=c_str02||'partition  p'||c_thismonth   ||' values less than (TO_DATE('||''''||t_mon1||''''||', ''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN''))    tablespace ' ||v_mxindts||','||chr(10) ;
        
       
            exit when to_char(t_mon, 'yyyymm') > '&zzsj';
      end loop;
      c_str01:='create index  dzfpmx01_index_jssj   on JS_SKSKJDK_DZFPMX01(JSSJ)
    global
    partition by range(jssj)
    ('||c_str02||'partition  p_default values less than (maxvalue)    tablespace users)';
    --   dbms_output.put_line('c_str01 is '||chr(10)||c_str01||');'
       
         execute immediate  c_str01;
         
         exception
           when   others then
           dbms_output.put_line(sqlerrm);
         
         
         
      end;
     

    /*
    First is starting
    t_mon is 01-1月 -01
    c_nextmonth is 0101
    c_thismonth is 0101
    t_mon is 01-2月 -01
    t_mon1 is 3001-02-01 00:00:00
    c_nextmonth is 0102
    v_mxtabts is lvsksk_t_m_0101
    v_mxindts is lvsksk_i_m_0101
    c_thismonth is 0102
    t_mon is 01-3月 -01
    t_mon1 is 3001-03-01 00:00:00
    c_nextmonth is 0103
    v_mxtabts is lvsksk_t_m_0102
    v_mxindts is lvsksk_i_m_0102
    c_thismonth is 0103
    t_mon is 01-4月 -01
    t_mon1 is 3001-04-01 00:00:00
    c_nextmonth is 0104
    v_mxtabts is lvsksk_t_m_0103
    v_mxindts is lvsksk_i_m_0103
    c_thismonth is 0104
    t_mon is 01-5月 -01
    t_mon1 is 3001-05-01 00:00:00
    c_nextmonth is 0105
    v_mxtabts is lvsksk_t_m_0104
    v_mxindts is lvsksk_i_m_0104
    c_thismonth is 0105
    t_mon is 01-6月 -01
    t_mon1 is 3001-06-01 00:00:00
    c_nextmonth is 0106
    v_mxtabts is lvsksk_t_m_0105
    v_mxindts is lvsksk_i_m_0105
    ORA-00955: 名称已由现有对象使用

    */

  • 相关阅读:
    toj 2975 Encription
    poj 1797 Heavy Transportation
    toj 2971 Rotating Numbers
    zoj 2281 Way to Freedom
    toj 2483 Nasty Hacks
    toj 2972 MOVING DHAKA
    toj 2696 Collecting Beepers
    toj 2970 Hackle Number
    toj 2485 Card Tric
    js页面定位,相关几个属性
  • 原文地址:https://www.cnblogs.com/iyoume2008/p/9174805.html
Copyright © 2020-2023  润新知