在数据字典中直接修改表列的名称和顺序

xxmx1203

xxmx1203

2016-01-29 14:41

在数据字典中直接修改表列的名称和顺序,在数据字典中直接修改表列的名称和顺序

按照关系数据库的理论,行与列都是无序的,但在实际应用中有时需要确定列的顺序。但在Oracle中,一旦表定义好,再想修改列的顺序可不太容易。

Oracle数据库没有提供直接修改表中列名称的功能,但在实际使用时常需要修改表的列名和列顺序,不得已有些Oracle的使用人员用重新创建一个新的具有正确列名和顺序的数据库表,再将旧表的数据转储进来,最后删除旧表并将新表重命名为旧表的方法来完成此功能。此方法的最大问题是要求有双倍的存储空间、较大的回滚段和较长的时间,如果表中数据量较大,这项工作开销会很大。实际上我们可以从数据字典中直接修改表列的名称和顺序。下面是具体的实现步骤:

1.以internal用户名登录Oracle数据库,并创建一测试表。

SQLCREATE TABLE SCOTT.TEST AS SELECT EMPNO,ENAME FROM SCOTT.EMP; SQLDESC SCOTT.TEST Name Type Nullable Default Comments ------- ------------ ------- EMPNO NUMBER(4) Y ENAME VARCHAR2(10) Y

下面我们要把SCOTT.TEST表中EMPNO和ENAME两列调换顺序,并把ENAME列更名为EMP_NAME,EMPNO改为EMP_NO。

2.查询表中列的实际存储位置或表。

SQLSET LONG 9999,由于TEXT列是LONG类型,只有“SET”之后才能完全显示。

SQLSELECT TEXT FROM ALL_VIEWS WHERE VIEW_NAME = ‘USER_TAB_COLUMNS’;

数据字典视图USER_TAB_COLUMNS中存储有表列的定义信息,从该语句的查询结果可以看出,列定义信息是存储在表SYS.COL$中的,即如果修改表中列的定义,应该在SYS.COL$表中修改。

3.从数据字典视图ALL_OBJECTS中查找对象SCOTT.TEST对象ID。

SQL SELECT * FROM ALL_OBJECTS WHERE OWNER =‘SCOTT’ AND OBJECT_NAME=‘TEST’;

4.根据SCOTT.TEST对象的ID,从SYS.COL$检索出表中列的定义信息。

SQL SELECT OBJ#,COL#,NAME FROM SYS.COL$ WHERE OBJ# =13888; OBJ# COL# NAME ---------- ---------- ------- 13888 1 EMPNO 13888 2 ENAME

5.使用Update语句来进行修改。

UPDATE SYS.COL$ SET COL# = 2,NAME=‘EMP_NO’ WHERE OBJ# = 13888 AND NAME=‘EMPNO’; UPDATE SYS.COL$ SET COL# = 1,NAME=‘EMP_NAME’ WHERE OBJ# = 13888 AND NAME =‘ENAME’; COMMIT;

6. 重启数据库服务。

由于数据字典是在数据库启动时加载到SQL中的,所以修改了它之后,如果使用“SELECT * FROM SCOTT.TEST; ”,会发现好像并没有修改。因此,修改完成之后,还需要重启数据库服务。

SQLSHUTDOWN SQLSTARTUP

这时,再查看,就会发现修改已经成功。

展开更多 50%)
分享

猜你喜欢

在数据字典中直接修改表列的名称和顺序

电脑网络
在数据字典中直接修改表列的名称和顺序

使用数据字典

编程语言 网络编程
使用数据字典

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

获取MSSQL数据字典的SQL语句

编程语言 网络编程
获取MSSQL数据字典的SQL语句

深入了解Oracle数据字典

编程语言 网络编程
深入了解Oracle数据字典

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Oracle的数据字典技术简析

编程语言 网络编程
Oracle的数据字典技术简析

MySQL5新特点(数据字典)

编程语言 网络编程
MySQL5新特点(数据字典)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《刀塔传奇》攻略之钻石 金币抽奖揭秘

《刀塔传奇》攻略之钻石 金币抽奖揭秘

用PHP实现标准的IP Whois查询

用PHP实现标准的IP Whois查询
下拉加载更多内容 ↓