开发者

Oracle move column to the first position

Is there any way to move an column in an Oracle table from last to first position? Someone has dropped the ID column, and recreated it. So now it is at the end, which is a problem because some of our PHP Scripts are using the first column as an identifier (one Abstract Model with more than 100 other Models usi开发者_JS百科ng this base object...)

See also:

  • In Oracle, is it possible to “insert” a column into a table?
  • Inserting new columns in the middle of a table?


The Oracle FAQ says:

Oracle only allows columns to be added to the end of an existing table.

You'd have to recreate your table.

RENAME tab1 TO tab1_old;

CREATE TABLE tab1 AS SELECT id, <the rest of your columns> FROM tab1_old;


the simplest way to modify the logical order of the columns of a table is to rename your table and create a view with the "right" column positions:

ALTER TABLE your_table RENAME TO your_table_t;

CREATE VIEW your_table AS SELECT <columns in the right order> FROM your_table_t;

-- grants on the view (the same as the table)
GRANT ** TO ** ON your_table;

Your application will behave as if the columns were in the "right" position. You don't have to touch at the physical structure.


In Oracle 12c it is now easier to rearrange columns logically. It can be achived by making column invisible/visible.If you change a invisible column to visible , the column will appear last in the odering.

Consider Using Invisible Columns

Create wxyz table:

CREATE TABLE t ( w INT,
y VARCHAR2, z VARCHAR2, x VARCHAR2

);

rearrange the x column to the middle:

ALTER TABLE wxyz MODIFY (y INVISIBLE, z INVISIBLE); ALTER TABLE wxyz MODIFY (y VISIBLE, z VISIBLE);

DESCRIBE wxyz;

Name

w

x

y

z


Recreating the table (via rename/temporary table so you don't lose your data) is the only way I know of.

I don't believe it's possible to simply change the column order.


If there isn't a ton of data/columns, you could simply rename the columns in the order you want. Then just delete * from 'your table name here'. This was a good solution for me since I hadn't inserted many records yet.


You might like to access your table via a view, so you can painlessly rearrange the logical order if it's important to the application technology.


Not possible to move column in oracle. It will be created in the last position. If anyone wanted so either view needs to be created or new table need to be created


I use this all the time:

ALTER TABLE MOVE COLUMN column_name TO ordinal_position;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜