Oracle 修改列的数据类型
来源:互联网 发布:中学生网络成瘾量表 编辑:程序博客网 时间:2024/05/15 15:16
转自:david_zhang@sh 致谢!
对字段操作操作方法更新字段名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修改列的数据类型的2种方法
- 修改Oracle数据库表的主键对应列的数据类型
- oracle-----修改已经有数据的列的数据类型
- ORACLE中修改已存数据的列的数据类型
- oracle修改表已存列的数据类型与列名重命名
- Mongodb修改列的数据类型
- [Linux --vim]: vim格式化所有代码
- Spring 自定义注解,配置简单日志注解
- 做ppt课件直播时如何解决ppt表格内容无法加载问题
- 2017-11-07
- Jmeter 测试spingmvc程序,token 登陆验证,压力测试
- Oracle 修改列的数据类型
- androidstudio更改优先加载系统包framework.jar的顺序
- SM951 NVMe 版本安装Win7 的正确方法
- Perl 常用特殊变量
- 6-15 求单链表结点的阶乘和(15 point(s))
- JAVA抽象类与接口
- 生信软件之fastqc(查看基因质量)
- requirejs初体验
- 网站性能优化的常用方法