Oracle修改字段类型方法总结

馋奶兔 提交于 2020-01-19 02:18:21

有一个表名为tb,字段段名为name,数据类型nchar(20)。

1、假设字段数据为空,则不管改为什么字段类型,可以直接执行:
alter table tb modify (name nvarchar2(20));

2、假设字段有数据,则改为nvarchar2(20)可以直接执行:
alter table tb modify (name nvarchar2(20));

3、假设字段有数据,则改为varchar2(50)执行时会弹出:“ORA-01439:要更改数据类型,则要修改的列必须为空”,这时要用下面方法来解决这个问题:

先备份

--备份
oracle用户终端执行:

exp [用户名]/[密码] tables=[表一],[表二] file=/home/oracle/table.dmp

--如果出现问题 可以恢复
oracle用户终端执行:

imp [用户名]/[密码] grants=y commit=y full=y ignore=y file=/home/oracle/table.dmp
/修改原字段名name为name_tmp/
alter table tb rename column name to name_tmp;

/增加一个和原字段名同名的字段name/
alter table tb add name varchar2(40);

/将原字段name_tmp数据更新到增加的字段name/
update tb set name=trim(name_tmp);

/更新完,删除原字段name_tmp/
alter table tb drop column name_tmp;

可以发现更改后字段变成了最后一列,介意的可参照下面的语句.

----增加一个和原字段名的辅助字段,并把值赋值过去
alter table tb add col_tmp varchar2(50);
update tb set col_tmp=trim(col) WHERE col is not null;

--赋值后,赋值原字段为null
update tb set col=null WHERE col is not null;

--修改原字段类型和值
alter table tb modify (col varchar2(50));
update tb set col=trim(col_tmp) WHERE col_tmp is not null;

--先执行上面的,执行下面的验证语句
SELECT * FROM tb WHERE col<>col_tmp;

--验证没问题后执行最后一句
alter table tb drop column col_tmp;

记得备份,oracle备份参考资料
总结:
1、当字段没有数据或者要修改的新类型和原类型兼容时,可以直接modify修改。
2、当字段有数据并用要修改的新类型和原类型不兼容时,要间接新建字段来转移。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!