能否转换数据类型并且保持数据不丢失一条!!一条SQL=50分

programmer_lee 2003-08-19 04:59:54
问题阐述:
程序连的是8i,现有一表tab1,有一字段aa 数据类型为Number(14)。
最近用户发现输入该字段的数据也有可能是带字母的数据,可是Number是不允许的,用户提出要求希望能够更改数据字段类型为VarChar(20),但是原来的4千多条数据希望保留....

问:
我在SQL Plus中怎么写这个SQL语句,既可以更改字段类型,又保证数据不丢失。
或者各位高手对这个问题有自己的解决办法,我学习学习!!谢谢!!!

...全文
51 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
programmer_lee 2003-08-20
  • 打赏
  • 举报
回复
谢谢大家的帮忙!!
我采用了tcmis(肖锋)的方法,他的方法比较通俗易懂。
另外beckhambobo(beckham)的回复也起到很大的作用。
还有就是 LGQDUCKY(飘) 他帮助我很多的问题。
谢谢大家!!
bzszp 2003-08-20
  • 打赏
  • 举报
回复
alter table tbname add (col varchar2(20));
update tbname set col=to_char(aa);
programmer_lee 2003-08-20
  • 打赏
  • 举报
回复
谢谢大家,我试试看....
beckhambobo 2003-08-19
  • 打赏
  • 举报
回复
SQL> create table bb (id number(14));

Table created

SQL> insert into bb values (123);

1 row inserted

SQL> alter table bb modify id varchar2(20);

alter table bb modify id varchar2(20)

ORA-01439: 要更改数据类型,则要修改的列必须为空 (empty)

SQL> truncate table bb;

Table truncated

SQL> alter table bb modify id varchar2(20);

Table altered

所以先要清空数据,才能修改类型
yuxuan 2003-08-19
  • 打赏
  • 举报
回复
应该可以直接修改,但安全起见最好先备份
ALTER TABLE tab1 MODIFY (AA VarChar2(20))
LGQDUCKY 2003-08-19
  • 打赏
  • 举报
回复

你aa字段数据类型为Number(14),更改数据字段类型为VarChar2(20),
这样你的长度已经打过原先Number(14),这样数据就不会丢失。
直接发语句。
ALTER TABLE tab1 MODIFY (AA VarChar2(20));
不放心,你就可以建立个临时表做备份。
create table a as select * from tab1;
这样你就放心去做吧。
tcmis 2003-08-19
  • 打赏
  • 举报
回复
create table new_table_name as select * from tab1;
delete from tab1;
commit;
alter table tab1 modify (aa varchar2(20));
insert into tab1 select * from new_table_name;
bluemeteor 2003-08-19
  • 打赏
  • 举报
回复
先备份数据

然后alter table

17,082

社区成员

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

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