oracle数据库中表的第一列是不是rownum

oracle数据库中表的第一列是不是rownum,第1张

oracle 中的 rownum 是伪列,不属于某一张表。

对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。

所以它更不是表中的第一列。

分为两步来实现,首先插入数据,假设表T,有字段col1,col2,col3,需要向前200行的col2插入行数+1的值,并将col2变为第一列,

插入数据有两种方法

1》直接update即:UPDATE T SET T.COL2 = ROWNUM + 1 WHERE ROWNUM <=200

2》写一个存储过程

CREATE OR REPLACE PROCEDURE INS IS

BEGIN

FOR I IN 1 .. 200 LOOP

INSERT INTO T (COL2) VALUES (I)

END LOOP

COMMIT

END

编译并运行该过程,插入列即完成。

下面将COL2列调整为第一列:

方法一:借用临时表,建temp表与t表的表结构、数据完全一致,重建t表,调整字段顺序,再将temp表的数据导回来,即

CREATE TABLE TEMP AS SELECT * FROM T

CREATE TABLE T(

COL2 TYPE,

COL1 TYPE,

COL3 TYPE

)

INSERT INTO T

SELECT COL2,COL1,COL3 FROM TEMP

COMMIT

DROP TABLE TEMP

此方法需要足够的空间、回滚段和时间消耗

方法2:利用数据库表对象更新字段的序列号

在当前表用户下使用下面命令查询T对象的编号:

select OBJECT_name,object_id from all_objects where object_name='T'(注意一定要大写)

SQL>/

OBJECT_NAME OBJECT_ID

------------------------------ ----------

T50555

切换到sys帐号下

select obj#,col#,name from col$ where obj#=50555

OBJ# COL# NAME

---------- ---------- ----------------------------

50555 1 COL1

50555 2 COL2

50555 3 COL3

Elapsed: 00:00:00.03

下面可以通过修改这个系统表来实现修改列名与顺序,注意,COL#就是列的顺序。

UPDATE COL$ SET COL#=2 WHERE OBJ#=50555 and name='COL1'

UPDATE COL$ SET COL#=1 WHERE OBJ#=50555 and name='COL2'

再次查询

select obj#,col#,name from col$ where obj#=50555

OBJ# COL# NAME

---------- ---------- ------------------------------

50555 1 COL2

50555 2 COL1

50555 2 COL3

提交修改commit

重启服务

SQL>SHUTDOWN IMMEDIATE

SQL>STARTUP

重新登录表用户下,查询SELECT * FROM T

COL2 COL1 COL3

至此列顺序调整成功


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10076170.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存