1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| SQL> desc t;
Name Null? Type
----------------------------------------- -------- ----------------------------
C1 NUMBER
C2 VARCHAR2(10)
C3 VARCHAR2(50)
C4 DATE
C5 LONG
SQL> WITH universe AS
(
SELECT column_id, table_name,
case when data_type = 'LONG' then 'to_lob('||column_name||')' else column_name end as column_name
FROM user_tab_columns
WHERE table_name = 'T'
)
SELECT 'create table '|| table_name || ' as select ' || substr(sys_connect_by_path(column_name,','),2) ||' from '||table_name
FROM universe
WHERE CONNECT_BY_ISLEAF = 1
START WITH column_id = 1
CONNECT BY column_id = 1 + PRIOR column_id ;
'CREATETABLE'||TABLE_NAME||'ASSELECT'||SUBSTR(SYS_CONNECT_BY_PATH(COLUMN_NAME,',
--------------------------------------------------------------------------------
create table T as select C1,C2,C3,C4,to_lob(C5) from T
SQL> |