發現有類似的問題,但是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
uj5u.com熱心網友回復:
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是源表。
uj5u.com熱心網友回復:
這是舉個例子,實際如果class量非常大,怎么辦。。求批量建表方法uj5u.com熱心網友回復:
這是舉個例子,實際如果class量非常大,怎么辦。。求批量建表方法
uj5u.com熱心網友回復:
用動態 sql 加 游標 可以uj5u.com熱心網友回復:
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;
/
uj5u.com熱心網友回復:
能詳細說說嗎。。 。
uj5u.com熱心網友回復:
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/96324.html
標籤:基礎和管理
