在SQL中可以通过output inserted.PkId获取刚插入的自增主键,但是在oracle不行。我通过下面的方法获取其自增序列id:
insert into Truck_Station(pkid,StationID,LIndex,CarArrId,LStation,Memo) values (sqe_Truck_Station.nextval,'003','0','6','','');
select sqe_Truck_Station.currval from dual
但是如果是多线程操作,第二句的查询保证不了获取的一定是第一句中的pkid,还有没有其他的方法,最好能吧这个语句帮我写出来,谢谢……

解决方案 »

  1.   

    CREATER OR REPLACE PROCEDURE p_Truck_Station_ins()
    IS
      v_seq NUMBER(18,0);
    BEGIN
      SELECT sqe_Truck_Station.nextval INTO v_seq FROM DUAL;
      insert into Truck_Station(pkid,StationID,LIndex,CarArrId,LStation,Memo)
      values(v_seq,'003','0','6','','');
      dbms_output.put_line('sqe_Truck_Station.currval is: '||to_char(v_seq));
      commit;
    END;
    /
      

  2.   

    存储过程我想到了,也在网上查了很多也说用存储过程。但是我现在是在改版一个项目,数据库方面不能动,在尽量小改动的情况下解决问题。所以我就犯难了……能不能用项SQL那样的方法,用SQL语句解决的?谢谢……
      

  3.   

    数据库方面不能动,程序代码能动么?-- 能动程序代码的话:就在程序代码里去操作撒,一样的原理啊:-- *1). 在程序代码里定义一个 int 类型的变量,先用这个变量去获取序列的 nextval;-- *2). 在插入语句中,将程序中变量得到的序列值去插入!-- 不是一样的原理么!如果你什么都不能动,那是任何人都没招....任何人也救不了你...