有没有办法将Oracle表中的列从最后一个位置移到第一个位置?有人删除了ID列,并重新创建了它。所以现在它在最后,这是一个问题,因为我们的一些PHP脚本使用第一列作为标识符(一个抽象模型与100多个其他模型使用这个基本对象...)参见:
zbwhf8kr1#
Oracle FAQ说道:Oracle只允许将列添加到现有表的末尾。你必须重新创建你的表。
RENAME tab1 TO tab1_old; CREATE TABLE tab1 AS SELECT id, <the rest of your columns> FROM tab1_old;
bmp9r5qi2#
修改表中列的逻辑顺序的最简单方法是重命名表,并创建一个具有“右”列位置的视图:
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;
您的应用程序将表现得好像列在“正确”的位置。你不需要触摸物理结构。
cx6n0qe33#
在Oracle 12 c中,现在可以更容易地在逻辑上重新排列列。这可以通过使列不可见/可见来实现。如果您将不可见列更改为可见,则该列将出现在排序的最后。考虑使用不可见列创建wxyz表:
CREATE TABLE 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; Name ---- w x y z
nwlqm0z14#
重新创建表(通过重命名/临时表,这样你就不会丢失数据)是我所知道的唯一方法。我不相信可以简单地改变列顺序。
goqiplq25#
如果没有大量的数据/列,你可以简单地按你想要的顺序重命名列。然后从“此处的表名”中删除 *。这对我来说是一个很好的解决方案,因为我还没有插入很多记录。
r3i60tvu6#
您可能希望通过视图访问表,这样就可以轻松地重新排列逻辑顺序(如果这对应用程序技术很重要的话)。
wi3ka0sx7#
无法在oracle中移动列。它将在最后一个位置创建。如果任何人都想这样要么视图需要创建或新表需要创建
g6baxovj8#
我一直在用这个:
ALTER TABLE MOVE COLUMN column_name TO ordinal_position;
8条答案
按热度按时间zbwhf8kr1#
Oracle FAQ说道:
Oracle只允许将列添加到现有表的末尾。
你必须重新创建你的表。
bmp9r5qi2#
修改表中列的逻辑顺序的最简单方法是重命名表,并创建一个具有“右”列位置的视图:
您的应用程序将表现得好像列在“正确”的位置。你不需要触摸物理结构。
cx6n0qe33#
在Oracle 12 c中,现在可以更容易地在逻辑上重新排列列。这可以通过使列不可见/可见来实现。如果您将不可见列更改为可见,则该列将出现在排序的最后。
考虑使用不可见列
创建wxyz表:
将x列重新排列到中间:
nwlqm0z14#
重新创建表(通过重命名/临时表,这样你就不会丢失数据)是我所知道的唯一方法。
我不相信可以简单地改变列顺序。
goqiplq25#
如果没有大量的数据/列,你可以简单地按你想要的顺序重命名列。然后从“此处的表名”中删除 *。这对我来说是一个很好的解决方案,因为我还没有插入很多记录。
r3i60tvu6#
您可能希望通过视图访问表,这样就可以轻松地重新排列逻辑顺序(如果这对应用程序技术很重要的话)。
wi3ka0sx7#
无法在oracle中移动列。它将在最后一个位置创建。如果任何人都想这样要么视图需要创建或新表需要创建
g6baxovj8#
我一直在用这个: