发现有类似的问题,但是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
有表如下:
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
create table t2 as select * from t where class='IV';
create table t3 as select * from t where class='IX';
t1 t2 t3是拆分后的表名,t是源表。
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;
/
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;