我insert 了一条记录 id为seq.nextval,
然后我需要把它再查询出来,
select * from table where id=seq.currval
报ora-00287的错误.
如何解决这个问题啊?
如果用max(id)查询的话,
如果别人此时也插入了一条语句,
那么会不会造成取出来的数据不对呢,

解决方案 »

  1.   

    就没这种语法select * from table where id=seq.currval 
      

  2.   

    你想在查询中取当前seq,就用max(id)方便。
    别人此时也插入了一条语句,会造成取出来的数据满足最大SEQ,你用 seq.currval取得的也是最大SEQ,一个效果。
      

  3.   

    要想保持一致性,不让别人在你查询时改变seq值,就在查询时for update
      

  4.   

    select *  from seqTest where c1 = (select max(c1) from seqTest)  for update 
    这样可以吗?
      

  5.   

    还是自己对oracle不熟悉.
    以前一直用db2,也不是太精通.
    现在改oracle.更晕.
      

  6.   

    解决办法:
    declare 
     cc int;
     max_v int;
    begin
     select seq.nextval into cc from dual;
     insert into tt valuse(cc);
     select max(colN) into max_v from  tt;
     if max_v=cc then
       dbms_output.put_line('没有错,可以继续进行!');
     else
       dbms_output.put_line('有错,不可以继续进行!');
     end if;
    end;