modify number to varchar2报错!

ocp_toad 2009-04-17 04:26:35
SQL> desc T_REPOSITORY_INDEX;
Name Type Nullable Default Comments
-------------- -------------- -------- ------- -----------------
PK_AUTO_ID NUMBER 标识ID
UK_FILE_ID VARCHAR2(20) Y 文件编号,唯一值
TITLE VARCHAR2(100) Y 知识库标题
CONTENT CLOB Y 知识库内容
TYPE NUMBER Y 知识库分类
LEVEL_ID NUMBER Y 重要 置1 一般置-1
POST_USER_NAME VARCHAR2(20) Y
UPDATE_TIME DATE Y
OPE_CODE VARCHAR2(20) Y
ANNEX VARCHAR2(2000) Y

如上表,我想把列type改成varchar2类型的。但是报错如下:

SQL> alter table T_REPOSITORY_INDEX modify type varchar2(200);

alter table T_REPOSITORY_INDEX modify type varchar2(200)

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

SQL> update T_REPOSITORY_INDEX set type is null where pk_auto_id=50004;

update T_REPOSITORY_INDEX set type is null where pk_auto_id=50004

ORA-00927: missing equal sign

SQL语句怎么写啊?我用的工具是plsql。
...全文
196 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcs_1 2009-04-17
  • 打赏
  • 举报
回复
用的是10g吧,如果是10g可以用新的功能,online table redefinition,用包dbms_redefinition快速实现表的重定义,很强大.
speedin 2009-04-17
  • 打赏
  • 举报
回复
最后不要忘记删除临时表。。。。
speedin 2009-04-17
  • 打赏
  • 举报
回复

CREATE TABLE table2 AS SELECT * FROM T_REPOSITORY_INDEX

truncate table T_REPOSITORY_INDEX

ALTER TABLE table1 modify B varchar2(200)

INSERT INTO T_REPOSITORY_INDEX
(PK_AUTO_ID,
UK_FILE_ID,
TITLE,
CONTENT,
TYPE,
LEVEL_ID,
POST_USER_NAME,
UPDATE_TIME,
OPE_CODE,
ANNEX)
SELECT PK_AUTO_ID,
UK_FILE_ID,
TITLE,
CONTENT,
TO_CHAR(TYPE),
LEVEL_ID,
POST_USER_NAME,
UPDATE_TIME,
OPE_CODE,
ANNEX
FROM table2
superhsj 2009-04-17
  • 打赏
  • 举报
回复
5楼的方法不错,少费点事
speedin 2009-04-17
  • 打赏
  • 举报
回复
可以将表中的数据导入到一张临时表中,然后删除源表中的数据,再修改列TYPE。最后再将中间表中的数据导回来,对于TYPE列,用函数TO_CHAR转换。
oraclelogan 2009-04-17
  • 打赏
  • 举报
回复
SQL> update T_REPOSITORY_INDEX set type=null;

2 rows updated

SQL> alter table T_REPOSITORY_INDEX modify type varchar2(200) ;

Table altered
fosjos 2009-04-17
  • 打赏
  • 举报
回复
或者先增加一列type1:varchar

update赋值到新列

删除type type1改成type
fosjos 2009-04-17
  • 打赏
  • 举报
回复
update ... set type=null where ...
number好像可以直接改成varchar2吧
实在不行,就删了,再增加
ocp_toad 2009-04-17
  • 打赏
  • 举报
回复
等待!
superhsj 2009-04-17
  • 打赏
  • 举报
回复
当前列中有数据的话,是不能改类型的
superhsj 2009-04-17
  • 打赏
  • 举报
回复
先把列中的数据备份出去,清除,然后修改,在把数据更新回来

17,140

社区成员

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

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