第一步:创建SEQUENCE
create sequence s_country_id increment by 1 start with 1 maxvalue 999999999;
第二步:创建一个基于该表的before insert 触发器,在触发器中使用该SEQUENCE
create or replace trigger bef_ins_t_country_define
before insert on t_country_define
referencing old as old new as new for each row
begin
new.country_id=s_country_id.nextval;
end;
或,用你说的方法
CREATE OR REPLACE TRIGGER TR1
  BEFORE INSERT ON temp_table
  FOR EACH ROW
declare 
com_num NUMBER;
BEGIN
SELECT MAX(ID) INTO COM_NUM FROM TEMP_TABLE; 
:NEW.ID:=COM_NUM+1;
END TR1;
/

解决方案 »

  1.   

    我使用的是Oracle8i,release3(8.17),中文版,
    新手上路
    走还不会,就要跑了你说的sequence是不是Oracle里的“队列”?
    另外,我要做的系统有很多表需要用到这样的流水号
    难道要对每一个表建一个触发器吗?
      

  2.   

    sequence是"序列"
    如果你不想创建的话,也可以在程序里面进行类似的操作,更改要添加的数据,然后再进行插入
    没想到什么更好的方法
      

  3.   

    sequence在ORACLE中叫“序列”,ORACLE中没有类似SQLSERVER中的IDENTITY类型。我也是ORACLE新手,一起努力。
      

  4.   

    最方便的就是使用“序列”和“触发器”了,但要注意如果数据库表结构发生变化,触发器回丢失或失效,需要重新创建。
     麻烦些就是用程序实现了,如果是多用户操作模式,就必须使用“序列”来保证数据的唯一,可以用:select 序列名.nextval from dual;得到序列的值。