Skip to Main Content

Breadcrumb

Question and Answer

Connor McDonald

Thanks for the question, manoprabu.

Asked: February 24, 2017 - 6:13 am UTC

Last updated: February 27, 2017 - 4:19 am UTC

Version: 11 g

Viewed 1000+ times

You Asked

Hi,




How will you copy the table from existing table to new table by ommiting a particular column name.
and if columns are few we can specify the column name but its very big table and so many columns are there.

and Connor said...

You cannot specify columns by negation, ie, you cannot do something like this:

select "* except col1"

you will need to specify all of the columns, but you could easily script that, eg

SQL> create table t as select * from dba_objects;

Table created.

SQL> desc t
 Name                                                                    Null?    Type
 ----------------------------------------------------------------------- -------- ------------------------------------------------
 OWNER                                                                            VARCHAR2(128)
 OBJECT_NAME                                                                      VARCHAR2(128)
 SUBOBJECT_NAME                                                                   VARCHAR2(128)
 OBJECT_ID                                                                        NUMBER
 DATA_OBJECT_ID                                                                   NUMBER
 OBJECT_TYPE                                                                      VARCHAR2(23)
 CREATED                                                                          DATE
 LAST_DDL_TIME                                                                    DATE
 TIMESTAMP                                                                        VARCHAR2(19)
 STATUS                                                                           VARCHAR2(7)
 TEMPORARY                                                                        VARCHAR2(1)
 GENERATED                                                                        VARCHAR2(1)
 SECONDARY                                                                        VARCHAR2(1)
 NAMESPACE                                                                        NUMBER
 EDITION_NAME                                                                     VARCHAR2(128)
 SHARING                                                                          VARCHAR2(13)
 EDITIONABLE                                                                      VARCHAR2(1)
 ORACLE_MAINTAINED                                                                VARCHAR2(1)

SQL>
SQL> select listagg(column_name,',') within group ( order by column_id)
  2  from user_tab_columns
  3  where table_name = 'T'
  4  and column_name not in ('OWNER','CREATED');

LISTAGG(COLUMN_NAME,',')WITHINGROUP(ORDERBYCOLUMN_ID)
----------------------------------------------------------------------------------------------------------------------------------
OBJECT_NAME,SUBOBJECT_NAME,OBJECT_ID,DATA_OBJECT_ID,OBJECT_TYPE,LAST_DDL_TIME,TIMESTAMP,STATUS,TEMPORARY,GENERATED,SECONDARY,NAMES
PACE,EDITION_NAME,SHARING,EDITIONABLE,ORACLE_MAINTAINED



Is this answer out of date? If it is, please let us know via a Comment