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



    --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: 名称已由现有对象使用

    */

  • 相关阅读:
    VRRP(Virtual Router Redundancy Protocol)业界标准
    CISCO快速转发
    89、C++中将临时变量作为返回值时的处理过程
    87、C++函数调用的压栈过程
    82、类什么时候会析构?
    84、智能指针的原理、常用的智能指针及实现
    81、构造函数一般不定义为虚函数的原因
    80、构造函数析构函数可否抛出异常
    79、虚析构函数的作用,父类的析构函数是否要设置为虚函数?
    78、构造函数、析构函数的执行顺序?
  • 原文地址:https://www.cnblogs.com/iyoume2008/p/9174805.html
Copyright © 2020-2023  润新知