Oracle将列移动到第一个位置

yrdbyhpb  于 2023-06-22  发布在  Oracle
关注(0)|答案(8)|浏览(324)

有没有办法将Oracle表中的列从最后一个位置移到第一个位置?有人删除了ID列,并重新创建了它。所以现在它在最后,这是一个问题,因为我们的一些PHP脚本使用第一列作为标识符(一个抽象模型与100多个其他模型使用这个基本对象...)
参见:

zbwhf8kr

zbwhf8kr1#

Oracle FAQ说道:
Oracle只允许将列添加到现有表的末尾。
你必须重新创建你的表。

RENAME tab1 TO tab1_old;

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

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;

您的应用程序将表现得好像列在“正确”的位置。你不需要触摸物理结构。

cx6n0qe3

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
nwlqm0z1

nwlqm0z14#

重新创建表(通过重命名/临时表,这样你就不会丢失数据)是我所知道的唯一方法。
我不相信可以简单地改变列顺序。

goqiplq2

goqiplq25#

如果没有大量的数据/列,你可以简单地按你想要的顺序重命名列。然后从“此处的表名”中删除 *。这对我来说是一个很好的解决方案,因为我还没有插入很多记录。

r3i60tvu

r3i60tvu6#

您可能希望通过视图访问表,这样就可以轻松地重新排列逻辑顺序(如果这对应用程序技术很重要的话)。

wi3ka0sx

wi3ka0sx7#

无法在oracle中移动列。它将在最后一个位置创建。如果任何人都想这样要么视图需要创建或新表需要创建

g6baxovj

g6baxovj8#

我一直在用这个:

ALTER TABLE MOVE COLUMN column_name TO ordinal_position;

相关问题