有一个哥们提出一个问题:
有个表,创建时候的列顺序是a,b,c
如何使用select * 的时候,让列的显示顺序是a,c,b 而且任性地必须使用select *来查询,且不能重建表。
假设有个表test
SQL> select * from test; A B C -------------------- -------------------- -------------------- you pig are SQL> select a,c,b from test; A C B -------------------- -------------------- -------------------- you are pig SQL>
按照其要求,应该是以下显示方式:
SQL> select * from test; A C B -------------------- -------------------- -------------------- you are pig SQL>
可以通过修改sys.col$表来改变表中列的顺序
SQL> SELECT owner,object_name,object_id FROM ALL_OBJECTS WHERE OBJECT_NAME='TEST'; OWNER OBJECT_NAME OBJECT_ID ------------------------------ ------------------------------ ---------- SYS TEST 88842 SQL> select obj#,col#,name from sys.col$ where obj# =88842 order by col#; OBJ# COL# NAME ---------- ---------- ------------------------------ 88842 1 A 88842 2 B 88842 3 C SQL> update sys.col$ set col#=2 where obj# =88842 and name='C'; 1 row updated. SQL> update sys.col$ set col#=3 where obj# =88842 and name='B'; 1 row updated. SQL> commit; Commit complete. SQL> select * from test; A C B -------------------- -------------------- -------------------- you are pig SQL>