一个表中的ID是自增字段,现在由于业务需求,需要与另一个表在插入时一起用事务插入,这样另一个表的插入的ID如何从自增字段里获得??

解决方案 »

  1.   

    oracle自增字段用的是序列,为了保证事物的一致性,建议自己写个自增的函数来获取自增字段
      

  2.   

    在事务开始的时候,先通过一个select语句把sequence number取回来,这样,事务中不管插入多少表,都可以用同一个sequence number了
      

  3.   

    建立一个sequences然后为另一个表建立如下触发器CREATE OR REPLACE TRIGGER table1_ID_TRG BEFORE INSERT OR UPDATE ON table1
    FOR EACH ROW
    DECLARE 
    v_newVal NUMBER(12) := 0;
    v_incval NUMBER(12) := 0;
    BEGIN
      IF INSERTING AND :new.SerialNo IS NULL THEN
        SELECT  table1_ID_SEQ.NEXTVAL INTO v_newVal FROM DUAL;
        
        IF v_newVal = 1 THEN 
          
          SELECT max(SerialNo) INTO v_newVal FROM table1;
          v_newVal := v_newVal + 1;
          
          LOOP
               EXIT WHEN v_incval >= v_newVal;
               SELECT table1_ID_SEQ.nextval INTO v_incval FROM dual;
          END LOOP;
        END IF;
       
        :new.ID := v_newVal;
      END IF;
    END;
      

  4.   

    解决了
    原来自增是添加了一个触发器,触发器里运行了序列,在事务的其他语句中使用序列的currvalue就可以了。