已经有数据的表这么加如一列(自动增加的ID号)

解决方案 »

  1.   

    alter table table_name add ilu number;先增加一列,然后插入数据时,插入之。
      

  2.   

    ALTER TABLE 表名 ADD 字段名 数据类型 ;
      

  3.   

    我的意思是里面的id值怎么添加进去

    id  name  relname
         111   aaa
         222   bbb
         553   bgs
    要怎么把现在空的ID值插入
      

  4.   

    oracle没有自增的属性,必须得使用sequence。创建一个步长为1的sequence。1、Create Sequence  
    你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,  
    CREATE SEQUENCE emp_sequence  
        INCREMENT BY 1  -- 每次加几个  
        START WITH 1    -- 从1开始计数  
        NOMAXVALUE      -- 不设置最大值  
        NOCYCLE         -- 一直累加,不循环  
        CACHE 10;  一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL  
     CURRVAL=返回 sequence的当前值  
     NEXTVAL=增加sequence的值,然后返回 sequence 值  
    比如:  
      emp_sequence.CURRVAL  
      emp_sequence.NEXTVAL  可以使用sequence的地方:  
    - 不包含子查询、snapshot、VIEW的 SELECT 语句  
    - INSERT语句的子查询中  
    - INSERT语句的VALUES中  
    - UPDATE 的 SET中    可以看如下例子:  
    INSERT INTO emp VALUES   
    (empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);  SELECT empseq.currval     FROM DUAL;  
      

  5.   

    update test set id= rownum whre
    然后按照7楼的建序列,start with改成表中最大的那个数。
      

  6.   

    oracle没有ORACLE自增字段这样的功能,但是通过触发器(trigger)和序列(sequence)可以实现。
    create table t_client (id number(4) primary key,
    pid number(4) not null,
    name varchar2(30) not null,
    client_id varchar2(10),
    client_level char(3),
    bank_acct_no varchar2(30),
    contact_tel  varchar2(30),
    address    varchar2(30),
    zip_code varchar2(10),
    is_leaf char(1) default 'y' check (is_leaf in('y','n')),
    is_client char(1) default 'n' check (is_client in('y','n')
    )); 假设关键字段为id,建一个序列,代码为:
    create sequence seq_t_client_id
    minvalue 1
    maxvalue 99999999
    start with 1
    increment by 1
    nocache
    order;
    建解发器代码为:
    CREATE OR REPLACE TRIGGER trg_t_client_id
    BEFORE INSERT ON t_client
    FOR EACH ROW
    BEGIN
    SELECT  seq_t_client_id.nextval INTO :new.id FROM dual;
    END;
    /
      

  7.   

    更新的时候,可以这么来控制每次更新的行数:
     update test set id=rownum where rownum<=10000 and id is not null;
    commit;
    继续下一次。
    否则几十万可能会回滚空间不足。
      

  8.   

    1.创建sequence
    2.用存储过程循环作update,id的值就是emp_sequence.NEXTVAL.
    3.如果数据量大,循环update的效率低的话,可以直接
    create table new_table tablespace ts_name as
    select emp_sequence.NEXTVAL as id, col1...col10
    from old_table;
    然后drop old_table, rename new_name to old_table_name.
    补上PK,index之类的限制...
      

  9.   

    update test set id=rownum connect by rownum <=10000 ;commit;
      

  10.   

    update test set id=rownum where rownum <=10000 and id is null;
      

  11.   

    谢谢各位
    我用update test set id=rownum 解决了。
      

  12.   

    1.alter table增加一个id列
    2.建序列
    3.更新已有数据的id: update table1 set id=seqname.nextval;
    4.以后插入数据时,手动使用序列seqname.nextval或建触发器自动添加