发现有类似的问题,但是sqlserver,求oracle写法。。原帖地址供参考http://bbs.csdn.net/topics/100034393
有表如下:
ID    NAME     CLASS
1     AA        II       
2     BB        IV       
3     AB        IV        
4     AC        II        
5     CC        IX        
6     SS        II          
7     AS        IX        
8     ES        IX  
---------------------
用什么方法可以把上的表按照class的内容分成多个表
结果如下:
ID    NAME     CLASS
1     AA       II
4     AC       II
6     SS       II
--------------------
ID    NAME     CLASS 
2     BB       IV       
3     AB       IV 
--------------------
ID    NAME     CLASS   
5     CC       IX  
7     AS       IX        
8     ES       IX

解决方案 »

  1.   

    create table t1 as select * from t where class='II';
    create table t2 as select * from t where class='IV';
    create table t3 as select * from t where class='IX';
    t1 t2 t3是拆分后的表名,t是源表。
      

  2.   

    这是举个例子,实际如果class量非常大,怎么办。。求批量建表方法
      

  3.   

    这是举个例子,实际如果class量非常大,怎么办。。求批量建表方法
      

  4.   

    用动态 sql  加 游标 可以
      

  5.   


    declare 
    v_tid int;
    v_sql varchar(300);
    begin
    v_tid := 0;
    for x in(select distinct class from t) loop
    v_tid := v_tid +1;
    v_sql := 'create table t' || v_tid || ' as select * from t where class = :1';
    execute immediate v_sql using x.class;
    end loop;
    end;
    /
      

  6.   


    DECLARE 
    CURSOR CR_CL IS  SELECT DISTINCT "CLASS" FROM T1;
    KK CR_CL%ROWTYPE;
    PP INTEGER;
    V_SQL VARCHAR(2000);
    BEGIN
      PP:=1;
     OPEN CR_CL;
     LOOP 
       FETCH CR_CL INTO KK;
       EXIT WHEN CR_CL%notfound ;
       V_SQL:='CREATE TABLE PA_'||TO_CHAR(PP)|| 'SELECT * FROM T1 WHERE CLASS=KK';
       EXEC IMMEDIATE V_SQL;
      END LOOP;
    END;