oracle 10g 表字段类型的修改 如把某字段varchar2(200)改为Long类型,只要记录中有数据,就不允许转换,有方法直接转换吗?

aivii 2010-10-16 11:01:20
oracle 10g 表字段类型的修改 如把某字段varchar2(200)改为Long类型,
只要记录中有数据,就不允许转换,有方法直接转换吗?

本人的意思是直接把字段类型由varchar2改为Long的方法,
如果是新增一个字段再间接转换就不需要了,
意在探讨,我觉得这点Oracle设置有点不合理,如果是生产系统,记录上亿,
要借助一个间接字段来达到转换目的话,这种效率觉得无法忍让,
望各位指点,谢谢!
...全文
533 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
虫洞 2010-10-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 aivii 的回复:]
oralce 好象任何类型的转换,只要记录中有数据了,就不能直接转换了。

1楼的朋友说新建一表,对于过亿的生产系统来说,更加不可行。

3楼的朋友可能还不太明白我的意思,如果是赋值,这样做是没问题的,我是想字段类型由Varchar2转换成Long类型,也就是说要用DDL语句更新表结构。
[/Quote]
要直接通过修改字段类型
以目前的oracel还做不到

但用一楼的做法重新建表再导入
我觉得是比直接在表里新建字段再update效率高的
aivii 2010-10-16
  • 打赏
  • 举报
回复
oralce 好象任何类型的转换,只要记录中有数据了,就不能直接转换了。

1楼的朋友说新建一表,对于过亿的生产系统来说,更加不可行。

3楼的朋友可能还不太明白我的意思,如果是赋值,这样做是没问题的,我是想字段类型由Varchar2转换成Long类型,也就是说要用DDL语句更新表结构。
Phoenix_99 2010-10-16
  • 打赏
  • 举报
回复
SQL> create table t1(id varchar2(2000));

Table created
SQL> insert into t1 values('asdfasdfsadasdfasfdasdfsdafsadfasdfsadfasdfasdfjljasldfjsdaf');

1 row inserted

SQ
SQL> commit;

Commit complete

SQL> create table t2(id long);

Table created

SQL> insert into t2 select id from t1;

1 row inserted

SQL> commit;

Commit complete

SQL> select * from t2;

ID
--------------------------------------------------------------------------------
asdfasdfsadasdfasfdasdfsdafsadfasdfsadfasdfasdfjljasldfjsdaf

SQL>

可以直接转换,但是varchar2有字符个数限制,好像是4000吧,不确认
gelyon 2010-10-16
  • 打赏
  • 举报
回复
直接转时有问题的,一个建议就是重新建表,将字段建成Long,然后将以前的数据导入新表中,这样就可以不用考虑varchar2类型和long类型了,因为可以将varchar2数据插入到LONG类型的字段,因为LONG类型的宽度要远远大于varchar2。
虫洞 2010-10-16
  • 打赏
  • 举报
回复
oracle的long确实一个棘手问题
许多限制

所以能不用尽量不用

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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