Oracle 修改表
来源:互联网 发布:景甜到底什么来头知乎 编辑:程序博客网 时间:2024/06/14 15:43
【转】Oracle 如何修改列的数据类型
原文:http://www.cnblogs.com/david-zhang-index/archive/2012/04/10/2441015.html
对字段操作操作方法更新字段名alter table TABLE_NAME rename column column_old to column_new;添加字段alter table TABLE_NAME add COLUMN_NAME varchar(10);删除字段alter table TABLE_NAME drop column COLUMN_NAME;添加字段并附值alter table TABLE_NAME ADD COLUMN_NAME NUMBER(1) DEFAULT 1;修改字段值update TABLE_NAME set filedname=value where filedname=value;修改字段数据类型alter table tablename modify filedname varchar2(20);1 SQL> select * from v$version;2 3 BANNER4 --------------------------------------------------------------------------------5 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production6 PL/SQL Release 11.2.0.1.0 - Production7 CORE 11.2.0.1.0 Production8 TNS for Linux: Version 11.2.0.1.0 - Production9 NLSRTL Version 11.2.0.1.0 - Production
1.修改字段数据类型时,如果该列有数据则报ORA-01439: column to be modified must be empty to change datatype,此时需要通过另外一种方法修改:
1 SQL> alter table zyt add id_temp varchar2(10); 2 3 Table altered. 4 5 SQL> commit; 6 7 Commit complete. 8 9 SQL> select * from zyt;10 11 NAME ID ID_TEMP12 ---------- ---------- ----------13 zyt1 114 david 215 16 SQL> alter table zyt rename column id to id_bak;17 18 Table altered.19 20 SQL> select * from zyt;21 22 NAME ID_BAK ID_TEMP23 ---------- ---------- ----------24 zyt1 125 david 226 27 SQL> desc zyt;28 Name Null? Type29 ----------------------------------------- -------- ----------------------------30 NAME VARCHAR2(10)31 ID_BAK NOT NULL NUMBER(2)32 ID_TEMP VARCHAR2(10)33 34 SQL> update zyt set ID_TEMP = cast(ID_BAK as varchar2(10));35 36 2 rows updated.37 38 SQL> commit;39 40 Commit complete.41 42 SQL> select * from zyt;43 44 NAME ID_BAK ID_TEMP45 ---------- ---------- ----------46 zyt1 1 147 david 2 248 49 SQL> alter table zyt drop column ID_BAK;50 51 Table altered.52 53 SQL> commit;54 55 Commit complete.56 57 SQL> select * from zyt;58 59 NAME ID_TEMP60 ---------- ----------61 zyt1 162 david 263 64 SQL> desc zyt;65 Name Null? Type66 ----------------------------------------- -------- ----------------------------67 NAME VARCHAR2(10)68 ID_TEMP VARCHAR2(10)
备注:这种方法能满足需求,因新增字段默认添加到表末尾,有可能发生行迁移,对应用程序会产生影响,同时也涉及复杂数据,不算最好的方法
2.建立一个中间跳板,临时存储数据
1 SQL> desc zyt; 2 Name Null? Type 3 ----------------------------------------- -------- ---------------------------- 4 NAME VARCHAR2(10) 5 ID VARCHAR2(10) 6 7 SQL> select * from zyt; 8 9 NAME ID10 ---------- ----------11 zyt1 112 david 213 14 SQL> alter table zyt add id_temp VARCHAR2(10)15 16 Table altered.17 18 SQL> select * from zyt;19 20 NAME ID ID_TEMP21 ---------- ---------- ----------22 zyt1 123 david 224 25 SQL> update zyt set ID_TEMP=id,id=null;26 27 2 rows updated.28 29 SQL> select * from zyt;30 31 NAME ID ID_TEMP32 ---------- ---------- ----------33 zyt1 134 david 235 36 SQL> alter table zyt modify id number(10);37 38 Table altered.39 40 SQL> desc zyt;41 Name Null? Type42 ----------------------------------------- -------- ----------------------------43 NAME VARCHAR2(10)44 ID NUMBER(10)45 ID_TEMP VARCHAR2(10)46 47 SQL> update zyt set id=ID_TEMP,ID_TEMP=null;48 49 2 rows updated.50 51 SQL> select * from zyt;52 53 NAME ID ID_TEMP54 ---------- ---------- ----------55 zyt1 156 david 257 58 SQL> alter table zyt drop column ID_TEMP;59 60 Table altered.61 62 SQL> commit;63 64 Commit complete.65 66 SQL> select * from zyt;67 68 NAME ID69 ---------- ----------70 zyt1 171 david 272 73 SQL> desc zyt;74 Name Null? Type75 ----------------------------------------- -------- ----------------------------76 NAME VARCHAR2(10)77 ID NUMBER(10)
备注:第二种方法,是增加一个与被修改的列类型一样的列,之后将要修改列的数据复制到新增的列并置空要修改的列,之后修改数据类型,再从新增列将数据拷贝回来,该过程涉及两次数据复制,如果是数据量很多,会比较慢同时也会产生很多undo和redo;优点是数据不会发生行迁移。
0 0
- 修改ORACLE表名
- ORACLE修改表空间
- ORACLE修改表结构
- oracle库表修改
- Oracle 修改表名
- oracle 修改表名
- Oracle脚本修改表
- oracle修改表
- oracle修改表
- oracle创建、修改表
- oracle修改表结构
- Oracle修改表结构
- oracle 表空间 修改
- 修改oracle表空间
- oracle表结构修改
- oracle修改表空间
- Oracle 修改表
- oracle修改表结构
- FreeRADIUS RADSQLRELAY说明
- write gpio reg
- 浅谈 C++ 中的 new/delete 和 new[]/delete[]
- Python 分布式计算模块 Parallel
- jdk8 Remove PermGen,Metaspace
- Oracle 修改表
- 将博客搬至CSDN
- CentOS 下安装Mplayer播放器(ubuntu同理)
- SVN服务器搭建和使用(二)
- 根据前序和中序遍历构造二叉树
- C语言中memset的用法 atoi strcmp
- 使用ntpdate校正Linux系统的时间
- 交通灯管理系统
- Crocus Technology 公司介绍