新建一列qty1.set qty1=qty 删qty的数据 再modify 再set qty=qty1 删qty1

解决方案 »

  1.   

    新建一个NUMBER(5,2)类型的列,然后把数据拷贝到这个列。
      

  2.   

    对于非空的字段是不能修改字段结构的,如上面提示所示,对于这种情况我通常采用的方法是:1、在tt1表中增加一个字段 QTY_TEMP(5,2);2、使用批量替换方法把QTY的值赋给新加的字段QTY_TEMP;3、删除字段QTY;alter table tt1 drop (QTY);4、把QTY_TEMP名改为QTY。
      

  3.   

    不能改一个列的名字,你这样还不如新建一个表:
    create table tt2(stor_id number(),ord_date date.qty number(5,2))
    as select * from tt1;
    drop table tt1;
    rename tt2 to tt1;
      

  4.   

    呆着也是呆着.
    下面的过程实现了变更有数据表的数值字段长度.
    大虾们看看,是这个意思吗?create or replace procedure ChangeN(tabName in varchar2,
                                        colName in varchar2,
                                        N1      in number,
                                        N2      in number) is
      strsql varchar2(400);
    begin
      strsql := 'alter table ' || tabname || ' add ' || colName || '_old' ||
                ' number (' || n1 || ',' || n2 || ')';
      execute immediate strsql;  strsql := 'update ' || tabName || ' set ' || colName || '_old' || '=' ||
                colName;
      execute immediate strsql;  strsql := 'alter table ' || tabName || ' drop (' || colName || ')';
      execute immediate strsql;  strsql := 'alter table ' || tabName || ' add ' || colName || ' number(' || N1 || ',' || N2 || ')';
      execute immediate strsql;  strsql := 'update ' || tabName || ' set ' || colName || '=' || colName ||
                '_old';
      execute immediate strsql;  strsql := 'alter table ' || tabName || ' drop (' || colName || '_old' || ')';
      execute immediate strsql;end ChangeN;
      

  5.   

    create table tmp as select qty,rowid no from tt1;
    update tt1 set qty=null;
    alter table tt1 modify qty NUMBER(5,2);
    update tt1 set qty=(select qty from tmp where tmp.no=tt1.rowid);
    drop table tmp;