本帖最后由 qdjnlmk 于 2010-01-21 13:05:14 编辑

解决方案 »

  1.   

    一般修改列的数据类型,要求该列为空,否则不能修改,
    如果要把VARCHAR(14)类型改为number类型呢?又如何操作?SQL>alter table tab modify(col newtype);如何把AAC001的字段原为空修改为非空呢???? 
    可以增加约束SQL>alter table tab add constraint c_chech check(AAC001 not null);
      

  2.   

    1、修改表名2、创建新表3、将记录Insert到新表中
      

  3.   

    这个要靠设计新的约束表来做了。在约束表中记录对各个字段的约束(比如A表B字段为number)。在原表A上加trigger,trigger里面查询这个新表,看看数据是否符合要求,符合则插入,不符合则略过或抛错。(比如:new.B包含汉字,则不符合)
      

  4.   

    1
    可以更改 但是会有一些限制条件
    SQL> select * from t1;P          C          TYPE
    ---------- ---------- ----------
    p1         c1         n
    p1         c2         s
    c2         s1         n
    s1         n1         n
    c2         s2         s
    s2         d1         n
    s2         d2         s
    d2         e1         n
    d2         e2         s9 rows selected.SQL> desc t1;
     Name                                      Null?    Type
     ----------------------------------------- -------- ---------------------------- P                                                  VARCHAR2(10)
     C                                                  VARCHAR2(10)
     TYPE                                               VARCHAR2(10)
    SQL> alter table t1 modify(p varchar2(20));Table altered.SQL> desc t1;
     Name                                      Null?    Type
     ----------------------------------------- -------- ---------------------------- P                                                  VARCHAR2(20)
     C                                                  VARCHAR2(10)
     TYPE                                               VARCHAR2(10)
    --因为表中已经存在占有两个字符的数据 所以当你想更改为varchar2(1)的时候会报错
    SQL> alter table t1 modify(p varchar2(1)); 
    alter table t1 modify(p varchar2(1))
                          *
    ERROR at line 1:
    ORA-01441: cannot decrease column length because some value is too big2
    字符型改数字型 那得看你原来字符型的那一列中是不是已经有数据了
    SQL> create table t2(name varchar2(10));Table created.SQL> insert into t2 values('1');1 row created.SQL> commit;Commit complete.SQL> select * from t2;NAME
    ----------
    1SQL> alter table t2 modify(name number);
    alter table t2 modify(name number)
                          *
    ERROR at line 1:
    ORA-01439: column to be modified must be empty to change datatype3
    通过加约束来实现吧
      

  5.   

    http://blog.csdn.net/huangyunzeng2008/archive/2010/01/05/5138560.aspx
      

  6.   

    这样子不知道行不????先添加新列:
    ALTER TABLE table_name ADD new_column_name TYPE(length);
    然后把原旧列内容复制到新列:
    SELECT old_column_name INTO new_column_name FROM table_name;
    再删除旧列:
    ALTER TABLE table_name DROP COLUMN old_column_name ;不知道这样的办法行否????还有个疑问就是针对“主键”字段又如何修改?把“短”字段修改为“长”字段,估计还好操作;  对于把“长”字段修改为“短”字段,估计很麻烦?
      

  7.   

    可以的,但操作不是很简单,update新字段可能耗时比较长