SQL> desc students
 名称                                      是否为空? 类型
 ----------------------------------------- -------- -------------
 SID                                       NOT NULL VARCHAR2(5)
 FNAME                                              VARCHAR2(20)
 LNAME                                     NOT NULL VARCHAR2(20)
 MINIT                                              CHAR(1)
 PHONES                                             CHAR(12)
 ADDRESS                                            VARCHAR2(24)上面是我得表,SID的类型为varchar想将其修改为number,SID是这个表的主键,另外还有表也有SID属性引用此表的,我该怎么写???
下面的方法出错:SQL> alter table students modify sid number(10);
alter table students modify sid number(10)
                            *
第 1 行出现错误:
ORA-02267: 列类型与引用的列类型不兼容tablenullsql

解决方案 »

  1.   

    新建一个过度的列 sid0number(10),把sid的值复制到此列
    另外还有表也有SID属性引用此表的
    把引用先停掉
    删掉sid 把sid0改为sid
      

  2.   

    首先谢谢你哦!!怎样把引用停掉,我做的与你说的差不多,新建一个临时的列SID_TEMP,将SID列的数据复制到SID_TEMP中去,接着我想讲SID置空然后再修改属性为number后再将SID——temp数据复制给它,但是不行,因为SID 是主键不能置空,没找到好方法是不是主键的话就不能进行类型修改了呢??
      

  3.   

    alter table +表名变量+ drop constraint +外键名称
    删掉后 记着 处理完了 再 把外键加上  
      

  4.   


    问你一个问题!!
    SQL> desc emp_test
     名称                                      是否为空? 类型
     ----------------------------------------- -------- -------------------------
     EMPNO                                     NOT NULL NUMBER(4)
     ENAME                                     NOT NULL VARCHAR2(20)
     SAL                                                NUMBER(6)
     HIREDATE                                           DATE

    SQL>  select constraint_name,constraint_type,table_name
      2    from user_constraints
      3    where table_name='emp_test';未选定行为什么显示为未选择行呢??
      

  5.   


    问你一个问题!!
    表为,里面有非空约束啦
    SQL> desc emp_test
     名称                                      是否为空? 类型
     ----------------------------------------- -------- -------------------------
     EMPNO                                     NOT NULL NUMBER(4)
     ENAME                                     NOT NULL VARCHAR2(20)
     SAL                                                NUMBER(6)
     HIREDATE                                           DATE

    SQL>  select constraint_name,constraint_type,table_name
      2    from user_constraints
      3    where table_name='emp_test';未选定行为什么显示为未选择行呢??这样我都查不出外键名了!!
      

  6.   

    你把'emp_test'修改为大写,其中的表名是大写的
      

  7.   


    yes!!谢谢,为什么会这样呢??不是在oracle中默认都会自转大写的吗?除了用双引号标注的,这里用的是'',我觉得应该到数据库中的时候这里面的符号自动转为大写了!