本帖最后由 dacobby 于 2011-06-15 09:05:07 编辑

解决方案 »

  1.   

    -- 先把 CUSTOMER 表的分区语句贴出来!
    select dbms_metadata.get_ddl('TABLE','CUSTOMER') from dual;-- 记住,表面上是在已有的分区上添加分区,如果要在分区表的中间部分添加分区,
    -  其实是将分区表的某个分区 split 为两个或更多的分区!
      

  2.   

    -- 先给个split分区的例子给你看吧:Alter table dept split partition d1 at (5) into
    (partition d1a tablespace dept1,
     partition d1b tablespace dept2);-- 上面的语句将表 dept 的 d1 分区在值为 5 的地方 将其划分成两个分区: d1a、d1b-- 下面是创建 dept 表的语句:
    create table dept(
     deptno number(2),
     dept_name varchar2(30) )
    partition by  range(deptno)
    ( partition d1 values less than (10) tablespace dept1,
      partition d2 values less than (20) tablespace dept2,
      partition d3 values less than (maxvalue) tablespace dept3);
      

  3.   

    只建了一个分区
    partition CUS_PART1 values less than (to_date('2010-12-31'),'yyyy-mm-dd')) 
    只是新增一个而已
      

  4.   

    我只是想动态添加新分区 分区名称为 ‘CUS_PART_’||年份 但是拼接的名称 貌似不行 会报类型错误
      

  5.   


    -- 理解能力真差!要在分区表中直接添加分区,只能在分区表的未尾去添加,
    -- 且添加分区时,分区表没有MAXVALUE分区!-- 你就不能先把 CUSTOMER表的建表语句贴出来吗?
      

  6.   

    工作的机器不让上网 奶奶个熊 打出来太累了  没有maxvalue分区
    只有 ‘2010-12-31’ 之前一个分区 
    说明白了么我?
      

  7.   

    分区名如同表名,不能使用变量或常量来拼接。
    只能使用PL/SQL中动态SQL来创建
      

  8.   

    总算被理解了,谢谢
    动态sql 能说详细点么?
    可以动态的添加出 名称为 CUS_PART_2011 的分区么
      

  9.   

    BEGIN
      --这是添加COS_PART_2012分区,范围是2012-12-31,如果要清加其它分区,自己修改吧
      EXECUTE IMMEDIATE 'ALTER TABLE CUSTOMER add PARTITION COS_PART_'||
                         to_char(SYSDATE + 365, 'yyyy')||' VALUES less than (to_date('''||
                         to_char(SYSDATE + 365, 'yyyy') || '-12-31'',''yyyy-mm-dd''))';
    END;
    /