http://community.csdn.net/Expert/topic/3019/3019594.xml?temp=3.107852E-02

解决方案 »

  1.   

    1、使用序列.nextval
    2、利用max(id)+1
      

  2.   

    create sequence AA0 start with 1 increment by 1; create table cust 
      (cust_id int not null ,cust_name char(10)) 
      
     insert into cust 
      values( AA0.nextval, 'zxcvzx')
      

  3.   

    象上面老兄写的,我每次往数据库里插入资料时必须插入cust_id值了,不象sqlserver那样这个值根本就不用管啊???
      

  4.   

    序列(Sequence):是一种可被多个用户使用的用于产生一系列唯一素质的数据库对象.
    序列定义存储在数据字典中.
    可以在以下场合使用nextval和currval伪列
    1>insert语句的子句中
    2>select语句中的前面选择的表列名
    3>update语句中的set字句
    以下场合不能使用nextval和currval伪列
    1>子查询
    2>视图和快照的定义查询
    3>带有distinct操作符的select语句
    4>带有group by或者order by字句的select语句
    5>通过union,intersect或minus与另一个select语句相结合的select语句中
    6>select语句的where字句中
    7>create table或alter table语句中的一个表列的default值定义中
    8>检查约束的条件中
      

  5.   

    --例子如下:
    CREATE SEQUENCE student_sequence
      START WITH 10000
      INCREMENT BY 1
      NOMAXVALUE
      CACHE 20;
    --CACHE:用以确定在内存高速缓冲区预先装入的一组序列数目,以实现对序列的快速访问CREATE TABLE tab_students (
      id               NUMBER(5) PRIMARY KEY,
      first_name       VARCHAR2(20),
      last_name        VARCHAR2(20),
      major            VARCHAR2(30),
      current_credits  NUMBER(3)
      );INSERT INTO tab_students (id, first_name, last_name, major,current_credits)
      VALUES (student_sequence.NEXTVAL, '杰', '李','计算机科学', 11);INSERT INTO tab_students (id, first_name, last_name, major,current_credits)
      VALUES (student_sequence.NEXTVAL, '小刚', '邓','历史', 4);commit;select * from tab_students;
    select student_sequence.CURRVAL from dual;
    select student_sequence.NEXTVAL from dual;--最好一个自增字段对应一个序列,序列一般配合触发器使用
      

  6.   

    建立一个最小为1,最大为999999999的一个序列号会自动循环的序列create sequence seq_name
    increment by 1 
    start with 1 
    maxvalue 999999999 
    cycle;调用,自动加一:
    insert into tablea(id,name) values(seq_name.nextval,'zfd (稻草人) ');
      

  7.   

    看我的例子CREATE TABLE "HR_MT"."TAPE"(                     ---------录音表
    TAPE_Id               Number(38),           -- 自动增益
    SINGAL_Id             Number(38),           -- HR_MT_SINGAL
    Fre_Center            Number(25,10),         -- 频率中心频点
    TAPE_DATE_S           DATE,                 -- 开始时间
    TAPE_DATE_E           DATE,                 -- 结束时间
    TAPE_File             Varchar2(200),        -- 录音文件名
    TAPE_Time_Long        Number(20)            -- 长度
    );ALTER TABLE "HR_MT"."TAPE" ADD( PRIMARY KEY (TAPE_Id));create sequence "HR_MT".TAPE_Id increment by 1 nocache;CREATE OR REPLACE TRIGGER "HR_MT"."TAPE_Id_TRIG" BEFORE INSERT
    ON "HR_MT"."TAPE"
    FOR EACH ROW
    DECLARE
    iid  NUMBER;
    BEGIN
    if :NEW.TAPE_Id is null then
    SELECT TAPE_Id.NEXTVAL INTO iid FROM DUAL;
    :NEW.TAPE_Id:=iid;
    end if;
    END;
    /