有啊,用sequence,即序列,--创建一个序列,参照创建序列的语法
create sequence seq_xh ....--序列的使用
insert into table(xh, name) values(seq_xh.next_val, 'John');

解决方案 »

  1.   

    序列就是用来解决你的问题的。
    用NEXTVAL属性取得下一个序列值。
    用CURRVAL属性取得当前值。可查看Oracle有关序列的信息以了解更多。
      

  2.   

    不过,你要注意create sequence时的一些开关参数,比如nocache 来保证sequence 可以提供
    连续的值
      

  3.   

    sequence 缺省的就是 NOCHACHE
      

  4.   

    谢谢!可是我认为还是存在着问题呀!我的程序中是这样的:当用户打开这个页面时,序号自动生成,当用户按下页面中的某一按钮后,才向数据库中插入数据记录。试想,如果A和B用户同时登录到该页面,数据库将取到下一序列号,两者相同,A先按下按钮,B再按按钮,这时数据库中的主键岂不不唯一了?不知我的理解对否?请指教!!
      

  5.   

    如果A和B用户同时登录到该页面,数据库将取到下一序列号,使用sequence,两者“并不”相同
      

  6.   

    xbin999:
    非常感激你!但我仍不太明白,能讲一下为什么不相同吗?两个用户同时登录到该页面,但并没有操作数据库呀,操作数据库的动作是在按钮事件中引发的呀?莫非由于序号自动生成,故用户登录上来后,不论是否操作数据库(向数据库中添加记录),Oracle自动能识别并生成序列号?
      

  7.   

    容易理解啊!
    打开窗体的时候select  next_val from seq_xh.如果这时next_val=3;
    那么另一个用户打开窗体时select  next_val from seq_xh.这时next_val=4;
    在你保存的时候直接拿3和4插进数据库就行了insert into 表名values(3,'',....
      

  8.   

    我也是这么理解得啊。。(同meng2002(网宁))我觉得不矛盾。