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 datatypeSQL> 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=50004ORA-00927: missing equal signSQL语句怎么写啊?我用的工具是plsql。

解决方案 »

  1.   

    update ... set type=null where ...
    number好像可以直接改成varchar2吧
    实在不行,就删了,再增加
      

  2.   

    或者先增加一列type1:varcharupdate赋值到新列删除type type1改成type
      

  3.   

    SQL> update T_REPOSITORY_INDEX set type=null;2 rows updatedSQL> alter table T_REPOSITORY_INDEX modify type varchar2(200)  ;Table altered
      

  4.   

    可以将表中的数据导入到一张临时表中,然后删除源表中的数据,再修改列TYPE。最后再将中间表中的数据导回来,对于TYPE列,用函数TO_CHAR转换。
      

  5.   


    CREATE TABLE table2 AS SELECT * FROM T_REPOSITORY_INDEXtruncate table T_REPOSITORY_INDEXALTER 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
      

  6.   

    用的是10g吧,如果是10g可以用新的功能,online table redefinition,用包dbms_redefinition快速实现表的重定义,很强大.