加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ORACLE字段名称、数据类型和数据字段大小修改

发布时间:2020-12-12 15:10:54 所属栏目:百科 来源:网络整理
导读:创建相关表,无数据。 conn aa/aa create table aa(id number,name varchar2(10)); commit; 1、字段数据为空,不管改为什么字段类型及字段大小,可以直接执行 原name数据类型为varchar2(10),改为varchar2(100)及nvarchar2(10)均成功 alter table aa modify n

创建相关表,无数据。

conn aa/aa

create table aa(id number,name varchar2(10));

commit;

1、字段数据为空,不管改为什么字段类型及字段大小,可以直接执行

原name数据类型为varchar2(10),改为varchar2(100)及nvarchar2(10)均成功

alter table aa modify name varchar2(100); -success

alter table aa modify name nvarchar2(100); -success

2、字段数据非空,修改字段长度,或兼容类型,可以直接执行(字段长度不能小于实际数据占用最大长度)

表插入数据:

insert into aa values(1,'aa');

insert into aa values(2,'bb');

commit;

1)字段修改为不兼容数据类型

目前name数据类型为nvarchar2(10),且字段有数据,直接修改不兼容数据类型失败:

alter table aa modify name varchar2(10); -faulure,报如下错误:

ORA-01439: column to be modified must be empty to change datatype

2)字段修改为兼容数据类型

目前name数据类型为nvarchar2(10),且字段有数据,直接修改兼容数据类型成功

alter table aa modify name nchar(10); -success

3)字段扩大

目前name数据类型为nvarchar2(10),且字段有数据,修改字段长度:

alter table aa modify name nvarchar2(100); -success,字段长度扩大没问题

4)字段缩小

alter table aa modify name nvarchar2(2); -success,字段值最大2,字段长度缩小到2没问题

alter table aa modify name nvarchar2(1); -failure,字段值最大2,字段长度缩小到1失败,会报下面错误

ORA-01441: cannot decrease column length because some value is too big

3、字段数据非空,修改不兼容数据类型,方法有两种

方法一:

1)原字段改临时字段名

alter table aa rename column name to name_tmp;

commit;

1)创建新字段(目标类型)

alter table aa add name varchar2(10);

commit;

2)新字段值=临时字段值

update aa set name=trim(name_tmp);

commit;

3)删除临时字段

alter table aa drop column name_tmp;

commit;

这种方法优点是简单,缺点是会改变表数据存储结构,可能会存在行迁移/行链接、碎片等问题(这问题可以通过表迁移解决)。

方法二:

1)创建临时字段(原类型和目标类型均可)

alter table aa add name_tmp varchar2(10);

commit;

2)临时字段值=原字段值

update aa set name_tmp=trim(name);

commit;

3)原字段值内容清空

update aa set name=null;

4)原字段类型修改为目标字段类型

alter table aa modify name varchar2(10);

5)原字段什=临时字段值

update aa set name=trim(name_tmp);

commit;

6)删除临时字段

alter table aa drop column name_tmp;

commit;

方法二对表结构没有改变,但当表数据量大时,影响较大。

4、字段数据为空或非空,修改字段名称,不管数据类型,方法一种

alter table aa rename column name to column name_new;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读