法1:
create sequenct s;
select s.nextval from dual;法2:
select rownum from all_objects;

解决方案 »

  1.   

    可以建一个表保存最新的序列号,然后
    select id into v_id from tb_new where rownum=1 for update;
    update tb_new set id=id+1;
    commit;释放锁
    如果出错则不会更新最大值
      

  2.   

    对sequence是有这个缺点.
    一般来说,程序是会有不可避免的会有错误,所以回滚,但是sequence却有不能回滚.
    这个问题一只存在,
    在不能被修改,和删除的情况下,用当前最大值加一.
      

  3.   

    程序控制吧!~表中建立一个唯一标识字段id number每次做插入操作之前取出最大的id,select max(id) from table_name
    然后给id值加1再插入表中。
      

  4.   

    自己仿照Sequence的思想写代码,加上让其可以回滚的控制。呵呵!
      

  5.   

    既然记录插入后就不会被删除,那么记录的顺序也不应该会改变,那么下面两个方法,我觉得都可行
    1:通过视图
    create or replace view vw as 
    select rownum id,tb.* from tb;2:考虑通过rowid做id(可用rowidtochar,将rowid转换成字符,再做处理)
      

  6.   

    鉴于搂住的这种情况我觉得
    jsnicle(js_nicle)的方法是可取的,更方便控制
      

  7.   

    建立一个存放当前最大序列号ID值的表,例如:id_v(id int)
    1.取表id_v中的id的值,加一后构造出文件名
    2.保存该文件
      如果保存文件成功,设置表id_v中的id = id + 1 ,更新该表,goto 3. ;
      如果保存文件失败,则goto 1.
    3.结束