1、在oracle 9i中,怎么在执行完插入语句后获得插入记录的自动增长的id??????
2、表A:    name      num
           0001      100
           0002      100
           0003      100
           0004      100
表B:      id      name
          1       0001,0003
          2       0001
          3       0001,0002,0003,.....
如何把表B的name按‘,’解析出来,取他们对应的num,然后再计算他们的和。
望各位高手帮忙了!!!!!!!!!!急急急!!!!!!!!!!!!! 

解决方案 »

  1.   

    SQL> select * from a;NAME              NUM
    ---------- ----------
    0001              100
    0002              100
    0003              100
    0004              100SQL> select * from b;                                     ID NAME
    --------------------------------------- ----------------------------------------
                                          1 0001,0003
                                          2 0001
                                          3 0001,0002,0003SQL> 
    SQL> select t.id, sum(A.num) num
      2    from A,
      3         (select id,
      4                 substr(',' || name || ',',
      5                        instr(',' || name || ',', ',', 1, rn) + 1,
      6                        instr(',' || name || ',', ',', 1, rn + 1) -
      7                        instr(',' || name || ',', ',', 1, rn) - 1) as name
      8            from B,
      9                 (select rownum rn
     10                    from all_objects
     11                   where rownum <=
     12                         (select max(length(name) - length(replace(name, ',')) + 1)
     13                            from B))) t
     14   where A.name = t.name
     15     and t.name is not null
     16   group by t.id
     17  /                                     ID        NUM
    --------------------------------------- ----------
                                          1        200
                                          2        100
                                          3        300SQL> 
      

  2.   

    1.自动增长的id一般是通过sequence获得,通过seq.nextval插入后,可以通过seq.currval获得。
    2.
    CREATE TABLE a(NAME VARCHAR2(20),num INT);
    CREATE TABLE b(ID INT,NAME VARCHAR2(400));
    INSERT INTO A VALUES ('0001', 100);
    INSERT INTO A VALUES ('0002', 100);
    INSERT INTO A VALUES ('0003', 100);
    INSERT INTO A VALUES ('0004', 100);
    INSERT INTO B VALUES (1, '0001,0003');
    INSERT INTO B VALUES (2, '0001');
    INSERT INTO B VALUES (3, '0001,0002,0003,0004');
    COMMIT;
    SELECT ID, SUM(A.NUM) SUM_NUM
      FROM (SELECT ID,
                   SUBSTR(',' || NAME || ',',
                          INSTR(',' || NAME || ',', ',', 1, XX.RN) + 1,
                          INSTR(',' || NAME || ',', ',', 1, XX.RN + 1) -
                          INSTR(',' || NAME || ',', ',', 1, XX.RN) - 1) NAME
              FROM B,
                   (SELECT ROWNUM RN
                      FROM ALL_OBJECTS
                     WHERE ROWNUM <=
                           (SELECT MAX(LENGTH(NAME) - LENGTH(REPLACE(NAME, ',')) + 1)
                              FROM B)) XX
             WHERE INSTR(',' || NAME, ',', 1, XX.RN) > 0) B,
           A
     WHERE A.NAME = B.NAME
     GROUP BY ID;输出:
    ID SUM_NUM
    1 200
    2 100
    3 400