Create table t_temp (keyed number(4) not null);
将字段设改为可空
Alter table modify (keyid number(4) null) -- null 必须写
将字段设改为非空
Alter table modify(keyid number(4) not null);
这里必须先保证字段中各个值非空,否则会报如下错误 ora-02296
ora-02296:cannot enable(..) - null values found
在修改的字段非空的情况下,是不可以对其字段的长度减小的
否则报 ora-01440 错误
在oracle 下如何将一个非空字段截断
建表
Create table t_tm (keyid number(8) not null);
插入数据
Insert into select 11 from dual;
1、 将该字段修改为可空
Alter table t_tm modify(keyid number(8) null);
2、 添加一列
Alter table t_tm add column keyidbak (number(6));
3、 清空keyid字段
Update t_tm set keyid='';
4、 修改改字段长度
Alter talbe t_tm modify(keyid number(6) not null);
5、 移植数据
Update t_tm set keyid = keyidbak;
6、删除备份列
Alter table t_tm drop column keyidbak;
以上步骤是保持字段所在的位置不改动,如果可以改动列位置,也可以如下做
1、 修改列名字 alter table t_tm rename column keyid to keyidold;
2、 添加新列 alter table t_tm add keyid number(3) null;
3、 填充新列数据 update t_tm set keyid = keyidold;
4、 删除旧列 alter table t_tm drop column keyidold;
5、 修改列属性 alter table t_tm modify(keyid number(3) not null);
也可以:先新增一个备份列 bak,set bak = keyid,然后删除 keyid列,再添加列新列
keyid,再将 set keyid = bak; drop column bak.
以上各个方式,大同小异:都必须保证备份列数据的长度不超过目标列长度。
当然修改列长度在实际应用当中不常存在的.