DECLARE
  STR VARCHAR2(322);
  TYPE CUR_TYPE IS REF CURSOR;
  T          CUR_TYPE;
  V_CUR      CUR_TYPE;
  V_BAR_CODE VARCHAR2(32);
BEGIN
  STR := 'SELECT BAR_CODE FROM test12';
  OPEN T FOR STR;
  LOOP
    OPEN V_CUR FOR STR;
    LOOP
      FETCH V_CUR
        INTO V_BAR_CODE;
      EXIT WHEN V_CUR%NOTFOUND;
      INSERT INTO TEMP12 (BAR_CODE) VALUES (V_BAR_CODE);
    END LOOP;
    CLOSE V_CUR;
  END LOOP;
  CLOSE T;
END;
CREATE TABLE test12(
    bar_code VARCHAR2(32)
);SELECT BAR_CODE FROM test12 FOR UPDATECREATE TABLE temp12(
    bar_code VARCHAR2(32)
);
最后报出错误ORA-30036:无法按8扩展段(在还原表空间'UNDO')
求解

解决方案 »

  1.   

    你这个游标干什么了呢?
    OPEN T FOR STR;
     LOOP
     END LOOP;
    CLOSE T;
    就打开一直循环,什么也没做
      

  2.   

    外层循环我只是想做个循环次数,代码没有贴完整,原来外层循环的就是为了得到str这个窜,才用的外层循环
      

  3.   

    我在外层循环加了 exit 也不行,,求解···
    BEGIN
      STR := 'SELECT BAR_CODE FROM test12';
      OPEN T FOR STR;
      LOOP
          EXIT WHEN t%NOTFOUND;
        OPEN V_CUR FOR STR;
        LOOP
          FETCH V_CUR
            INTO V_BAR_CODE;
          EXIT WHEN V_CUR%NOTFOUND;
          INSERT INTO TEMP12 (BAR_CODE) VALUES (V_BAR_CODE);
        END LOOP;
        CLOSE V_CUR;
      END LOOP;
      CLOSE T;
    END;
      

  4.   


    不明白 你的到底目标是什么  不过可能的数据量大  循环很多的 次数  肯定会撑爆undo的表空间的要么加大 undo 表空间  试试  不过只能治标不治本
      

  5.   

    最外层加 EXIT WHEN t%NOTFOUND; 没什么用,因为没有 fetch 动作,还是死循环。
      

  6.   


    .... ----试试
    V_BAR_CODE2 test12.BAR_CODE%type;BEGIN
      STR := 'SELECT BAR_CODE FROM test12';
      OPEN T FOR STR;
      LOOP
    fetch t into V_BAR_CODE2 ;
      EXIT WHEN t%NOTFOUND;
      OPEN V_CUR FOR STR;
      LOOP
      FETCH V_CUR
      INTO V_BAR_CODE;
      EXIT WHEN V_CUR%NOTFOUND;
      INSERT INTO TEMP12 (BAR_CODE) VALUES (V_BAR_CODE);
      END LOOP;
      CLOSE V_CUR;
      END LOOP;
      CLOSE T;
    END;