Oracle中没有这项功能,这是sybase或sql server中的功能
不过方法还是有的,需要一些人为的因素
你可以先建一个sequence,在insert时调用seq1.nextval即实现了自增长
论坛中也有相关的贴子.

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/1188/1188814.xml?temp=7.323855E-02
      

  2.   

    http://expert.csdn.net/Expert/topic/1188/1188814.xml?temp=.3250849
      

  3.   

    用trigger加上sequence来做,
    应该不难。
      

  4.   

    去看看~
    http://expert.csdn.net/Expert/topic/1511/1511988.xml?temp=.3662683
      

  5.   

    非常简单,触发序列就行了
    --创建序列:
    CREATE SEQUENCE "SE_BOOK" INCREMENT BY 1 START 
        WITH 1 MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE 
        CACHE 20 NOORDER;
        
    --创建触发器:
    CREATE OR REPLACE TRIGGER "TR_BOOK" BEFORE 
        INSERT 
        ON "BOOK" 
        FOR EACH ROW BEGIN
    SELECT SE_BOOK.nextval INTO :new.ID FROM dual;
    END;注:SE_BOOK是序列名称,TR_BOOK是触发器名称,这样建好以后,就完全不考虑book中的id字段了插入数据:INSERT INTO BOOK (NAME,PRICE) VALUES ('test','200');
      

  6.   

    --创建触发器:
    CREATE OR REPLACE TRIGGER "TR_BOOK" BEFORE 
        INSERT 
        ON "BOOK" 
        FOR EACH ROW BEGIN
    SELECT SE_BOOK.nextval INTO :new.ID FROM dual;
    END;我想问一下 new.ID 和 dual是什么东东?
      

  7.   

    DUAL is a table automatically created by Oracle along with the data dictionary. DUAL is in the schema of the user SYS, but is accessible by the name DUAL to all users.:old和: n e w相关标识符
    触发语句     标识符:                        o l d 标识符: n e w
    I N S E RT   无定义-所有字段为空N U L L     该语句结束时将插入的值
    U P D A E    更新前行的原始值               该语句结束时将更新的值
    D E L E T E  行删除前的原始值               无定义-所有字段为空N U L L
      

  8.   

    dual是一个虚表,只一列一行,D(X).不能修改.
      

  9.   

    还想问一下,我在使用PLSQL Developer创建了如下序列和触发器:
    --创建序列
    CREATE SEQUENCE "seq_uid" INCREMENT BY 1 START 
        WITH 1 MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE 
        CACHE 20 NOORDER;
    --创建触发器
    CREATE OR REPLACE TRIGGER "TR_uid" BEFORE 
        INSERT 
        ON "USER_INFO" 
        FOR EACH ROW BEGIN
    SELECT SE_BOOK.nextval INTO :new.userid FROM dual;
    END;
    其中 USER_INFO是我的表,里面有我需要自动增长的字段userid,我参照 ehaina(snowai) 方法写的。USER_INFO表里三个字段(userid,username,userpassword)。
    然后在我insert into USER_INFO(username,userpassword) values('aaa','ccc');
    时仍然出错。请问我写的触发器是否有问题?
      

  10.   

    建议采用主键和序列的方式实现,触发器影响系统性能
    方法如下:
    1.建一表Test: 一字段id为主键
    2.建一序列:SeqTestid
    插入数据如下:
    Insert into Test (id,其他字段) values (SeqTestid.nextval,其他字段值)
      

  11.   

    你创建的序列不是SE_BOOK,用你创建的序列名称
      

  12.   

    參考
     alarda(alarda) 
    的就可以的
      

  13.   

    w_tsinghua() :我是写错了,我是用的我自己的序列名称:seq_uid
      

  14.   

    我终于发现问题了。我不知道是不是和我使用PLSQL Developer工具有关,我在建立表字段时使用的小写字母,但我重新查询的时候发现它已经变成了大写,这点我在JSP页面里面有测试,使用小写字段名进行插入时,错误显示无效列。改用大写就一切OK。
    刚才我把建立序列名和触发器名以及表名和字段名都改成大写,一切都OK了。
    感谢 ehaina(snowai) ,w_tsinghua() ,还要感谢楼主借用贵宝地。只是w_tsinghua():我对于你解释的下面关于NEW标识符没有理解清楚,可能是我苯了点,能否用中文解释详细点,最好连 select 序列名 into这一整句说明一下,因为我并没有理解它。谢谢。
    old和: n e w相关标识符
    触发语句     标识符:                        o l d 标识符: n e w