加一个sequence
create sequence xxx;
然后对那个表增加一列,建立触发器插入xxx.nextval
设该列为主键

解决方案 »

  1.   

    方法:
    1.创建sequence就可以
    create sequence seq_name
    minvalue 1
    maxvalue 999999999999999999
    start with 1
    increment by 1
    cache 20;
    可以直接在插入时调用seq_name.nextval;
    如insert into table_name(proid) values(seq_name.nextval);2.也可以创建触发器(同时要创建sequence):
    create or replace trigger trg_name
    before insert on table_name
    for each row
    begin
    select seq_name.nextval into :new.proid from dual;
    end;
    /
      

  2.   

    楼上说的对。sequence只创建一次,以后再插入数据时直接调用seq_name.nextval就可。
    如:
    SQL> select seq_name.nextval from dual;  NEXTVAL
    ---------
           61SQL> select seq_name.nextval from dual;  NEXTVAL
    ---------
           62
      

  3.   

    那sequence是不是不可以许多表共享呀
      

  4.   

    可以共享。每次取出sequence的值seq_name.nextval 都是唯一的。
      

  5.   

    这是一个简单的例子,不过已经能够表示如何实现这类功能了。 1、在scott用户下建立表dept(其实oracle缺省安装就已经生成了) 
    create table DEPT 

      DEPTNO NUMBER(2) not null, 
      DNAME VARCHAR2(14), 
      LOC VARCHAR2(13) 
    ) 2、建立一个sequence 
    create sequence seq_dept 
    minvalue 1 
    start with 1 
    increment by 1 
    nocache; 3、为dept表建立一个insert trigger 
    create or replace trigger insert_dept 
      before insert on dept   
      for each row 
    declare 
      -- local variables here 
    begin 
       select seq_dept.nextval into :new.deptno from dual; 
    end insert_dept; 4、用insert语句测试 insert into dept(dname,loc) values('aaaaaa','bbbbb'); 用select * from dept察看结果
      

  6.   

    select 起始号码 + rownum - 1 from tcm_user where rownum <= -(起始号码-终止号码)+1