有没有办法将oracle表中的列从最后一个位置移动到第一个位置?有人丢弃了ID列,并重新创建了它。所以现在它结束了,这是一个问题,因为我们的一些PHP脚本使用第一列作为标识符(一个抽象模型使用此基础对象超过100个其他模型..)
答案 0 :(得分:18)
Oracle只允许将列添加到现有表的末尾。
你必须重新创建你的桌子。
RENAME tab1 TO tab1_old;
CREATE TABLE tab1 AS SELECT id, <the rest of your columns> FROM tab1_old;
答案 1 :(得分:7)
修改表格列的逻辑顺序的最简单方法是重命名表格并创建一个“右”列位置的视图:
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;
您的应用程序的行为就像列位于“正确”位置一样。您不必触及物理结构。
答案 2 :(得分:2)
在Oracle 12c中,现在可以更轻松地在逻辑上重新排列列。可以通过使列不可见/可见来实现。如果将不可见列更改为可见,则列将显示在odering中的最后一列。
Consider Using Invisible Columns
创建wxyz表:
创建表t(
w INT,
y VARCHAR2,
z VARCHAR2,
x VARCHAR2
);
将x列重新排列到中间位置:
ALTER TABLE wxyz MODIFY(y INVISIBLE,z INVISIBLE); ALTER TABLE wxyz MODIFY(y VISIBLE,z VISIBLE);
DESCRIBE wxyz;
w
X
ý
ž
答案 3 :(得分:1)
重新创建表格(通过重命名/临时表,以免丢失数据)是我所知道的唯一方法。
我认为不可能只是更改列顺序。
答案 4 :(得分:1)
如果没有大量数据/列,您只需按所需顺序重命名列即可。然后,只需在此处删除*表格中的*即表格&#39;。这对我来说是一个很好的解决方案,因为我还没有插入很多记录。
答案 5 :(得分:0)
您可能希望通过视图访问您的表,因此如果对应用程序技术很重要,您可以轻松地重新排列逻辑顺序。
答案 6 :(得分:0)
无法在oracle中移动列。它将在最后一个位置创建。如果有人想要,则需要创建视图或者需要创建新表
答案 7 :(得分:-2)
我一直都在使用它:
ALTER TABLE MOVE COLUMN column_name TO ordinal_position;