12c - Silly little trick with invisibility...
        Posted  
        
            by noreply(at)blogger.com (Thomas Kyte)
        on Oracle Blogs
        
        See other posts from Oracle Blogs
        
            or by noreply(at)blogger.com (Thomas Kyte)
        
        
        
        Published on Tue, 2 Jul 2013 18:03:37 +0000
        Indexed on 
            2013/07/02
            23:12 UTC
        
        
        Read the original article
        Hit count: 340
        
Filed under: 
        This is interesting, if you hide and then unhide a column - it will end up at the "end" of the table.  Consider:
ops$tkyte%ORA12CR1> create table t ( a int, b int, c int );
Table created.
ops$tkyte%ORA12CR1>
ops$tkyte%ORA12CR1> desc t;
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
A NUMBER(38)
B NUMBER(38)
C NUMBER(38)
ops$tkyte%ORA12CR1> alter table t modify (a invisible);
Table altered.
ops$tkyte%ORA12CR1> alter table t modify (a visible);
Table altered.
ops$tkyte%ORA12CR1> desc t;
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
B NUMBER(38)
C NUMBER(38)
A NUMBER(38)
Now, that means you can add a column or shuffle them around. What if we had just added A to the table and really really wanted A to be first. My first approach would be "that is what editioning views are great at". If I couldn't use an editioning view for whatever reason - we could shuffle the columns:
ops$tkyte%ORA12CR1> alter table t modify (b invisible);
Table altered.
ops$tkyte%ORA12CR1> alter table t modify (c invisible);
Table altered.
ops$tkyte%ORA12CR1> alter table t modify (b visible);
Table altered.
ops$tkyte%ORA12CR1> alter table t modify (c visible);
Table altered.
ops$tkyte%ORA12CR1>
ops$tkyte%ORA12CR1> desc t;
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
A NUMBER(38)
B NUMBER(38)
C NUMBER(38)
ops$tkyte%ORA12CR1> create table t ( a int, b int, c int );
Table created.
ops$tkyte%ORA12CR1>
ops$tkyte%ORA12CR1> desc t;
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
A NUMBER(38)
B NUMBER(38)
C NUMBER(38)
ops$tkyte%ORA12CR1> alter table t modify (a invisible);
Table altered.
ops$tkyte%ORA12CR1> alter table t modify (a visible);
Table altered.
ops$tkyte%ORA12CR1> desc t;
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
B NUMBER(38)
C NUMBER(38)
A NUMBER(38)
Now, that means you can add a column or shuffle them around. What if we had just added A to the table and really really wanted A to be first. My first approach would be "that is what editioning views are great at". If I couldn't use an editioning view for whatever reason - we could shuffle the columns:
ops$tkyte%ORA12CR1> alter table t modify (b invisible);
Table altered.
ops$tkyte%ORA12CR1> alter table t modify (c invisible);
Table altered.
ops$tkyte%ORA12CR1> alter table t modify (b visible);
Table altered.
ops$tkyte%ORA12CR1> alter table t modify (c visible);
Table altered.
ops$tkyte%ORA12CR1>
ops$tkyte%ORA12CR1> desc t;
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
A NUMBER(38)
B NUMBER(38)
C NUMBER(38)
Note: that could cause some serious invalidations in your database - so make sure you are a) aware of that b) willing to pay that penalty and c) really really really want A to be first in the table!
© Oracle Blogs or respective owner