ORACLE修改字段类型(急)

sky_0036 2011-07-02 04:40:39
ORACLE表里有记录,现在想修改表的某个字段的数据类型,该怎么改?
...全文
89 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
304的的哥 2011-07-02
  • 打赏
  • 举报
回复
带有记录的表,修改字段类型,有很多主意事项:
1.同类型的只可以扩展长度,不可以缩减精度
2.没有约束的数据类型(long,clob,blob,row除外)可以转换为字符型,精度足以存放当前数据类型的长度

SQL> create table t(col_1 varchar2(10 char),col_2 date);

Table created

SQL>
SQL> insert into t(col_1,col_2)
2 values('qwertyuiop',to_date('2011-01-01','yyyy-mm-dd'));

1 row inserted
SQL> insert into t(col_1,col_2)
2 values('1023546.78',to_date('2010-05-04','yyyy-mm-dd'));

1 row inserted

SQL> commit;

Commit complete

SQL> alter table t modify col_1 number(10);

alter table t modify col_1 number(10)

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

SQL> alter table t modify col_1 varchar2(15);

Table altered

SQL> alter table t modify col_2 varchar2(15);

alter table t modify col_2 varchar2(15)

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

SSQL> alter table t modify col_1 varchar2(5);

alter table t modify col_1 varchar2(5)

ORA-01441: cannot decrease column length because some value is too big
秋雨飘落 2011-07-02
  • 打赏
  • 举报
回复
给你说下大概思路,自己学习操作,
个人觉得,有数据的情况下,最合理的方法是:

1.增加一个新列FLAG1
2.UPDATE BIAO SET FLAG1 = 需要修改类型的字段;
3.update biao set 需要修改的字段 = '';
4.修改字段类型;
5.update 表 set 需要修改的字段=flag1;
6,DROP FLAG1
304的的哥 2011-07-02
  • 打赏
  • 举报
回复

SQL> create table t(col_1 number(5));

Table created

SQL> alter table t modify col_1 varchar2(10);

Table altered

SQL> --没有数据

--如果表中有数据,那么另外创建一个表
--将此表中的数据添加进去

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧