CREATE SEQUENCE SEQname
 INCREMENT BY  1
 START WITH  1
 MAXVALUE  99999999
/
CREATE TRIGGER TRGname
BEFORE  INSERT  ON table_nameFOR EACH ROW
Begin
   SELECT SEQname.NEXTVAL
     INTO :NEW.FIELDname
     FROM DUAL;
End;

解决方案 »

  1.   

    对数据量大的可采用第一种方法速度要快些。
    其它可使用编一个存贮过程,
    用程序调用该过程,插入记录时采用第二种方法动态传入参数id和TEMP_TABLE
      

  2.   

    如果我要在另一个表为test触发,怎么创建触发器?
    需要替换那些名字? DUAL是哪的表?提示无效的触发器说明,什么意思?
      

  3.   

    http://www.oradb.net/others/dual_001.htm
      

  4.   

    dual是一个虚表,只有一行数据
      

  5.   

    谢谢,那SEQname与TRGname
    名字是随便写吗?table_name是不是我的表名test,
    SEQname.NEXTVAL INTO :NEW.FIELDname
    中NEXTVAL,NEW.FIELDname又是从哪来的??
      

  6.   

    NEXTVAL 是设置好序列后生成的下一个值
    :NEW.FIELDname 新的插入的值 对删除没用
      

  7.   

    SEQname与TRGname
    是你创建的序列的名字和触发器的名字
    创建的时候名字当然是随便取得了
    SEQname.NEXTVAL是取序列的下一个值
    NEW.字段名 为当前插入的字段的值
      

  8.   

    靠,我才看明白.大哥你是要增加記錄,不是字段啊,看得我頭直暈,誰說oracle的觸發器只能對一個表啊,你把oracle當成sqlserver那種爛東西了
      

  9.   

    insert test(id,...) values(SEQname.NEXTVAL,...)
      

  10.   

    多表同样可以用触发器,如果是增加序列的事情,你可以给每个表
    都建立一个序列,或者多表使用一个序列.
    可以在前台诸如:
     strSeq:='select nextval from dual'
    后台用触发器实现.