问一下高手,下面的程序,不太理解
CREATE OR REPLACE PROCEDURE INSERTSINGLETABLE(HEXID IN VARCHAR2) IS
        -- maxrecords constant int :=1000;
        i int :=1;
        STARTTIME DATE;
        CROSSID CROSSCONFIG.CROSSID%TYPE;
        CURSOR CROSSCURSOR IS SELECT CROSSID FROM CROSSCONFIG;
BEGIN
    OPEN CROSSCURSOR;
         WHILE i < 101 LOOP
               i := i + 1;
               LOOP
                 FETCH CROSSCURSOR INTO CROSSID;  
                 EXIT WHEN CROSSCURSOR%NOTFOUND;
                 STARTTIME := SYSDATE;
                 INSERT INTO DETECTORDATA VALUES(
                  CROSSID,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100)),
                  SYSDATE,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100)),
                  TRUNC(DBMS_RANDOM.VALUE (0, 100)),
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  TRUNC(DBMS_RANDOM.VALUE (0, 100))   ,
                  HEXID,
                  HEXID
             );
              
            END LOOP; 
            COMMIT; 
         END LOOP;
         EXCEPTION   
             WHEN OTHERS THEN  
                  CLOSE CROSSCURSOR;  
  --for i in 1..100 loop
END INSERTSINGLETABLE;
为什么每回只插入了1条数据,而我要求的是100条,请高手指点一下?

解决方案 »

  1.   

    FETCH CROSSCURSOR INTO CROSSID;
    EXIT WHEN CROSSCURSOR%NOTFOUND;
    因为你的内层循环只在第一次执行(游标只打开一次,后面游标已经到头了),i>1后,并不执行内层循环如果楼主是想针对游标每个值都插入100条,应该内、外层循环互换一下
      

  2.   

    CREATE OR REPLACE PROCEDURE INSERTSINGLETABLE IS
      -- maxrecords constant int :=1000;
      i int :=1;
      STARTTIME DATE;
      CROSSID emp.empno%TYPE;
      CURSOR CROSSCURSOR IS SELECT empno FROM emp;
    BEGIN
      OPEN CROSSCURSOR;
      LOOP
      FETCH CROSSCURSOR INTO CROSSID;   
      dbms_output.put_line(CROSSCURSOR%ROWCOUNT);
      EXIT WHEN CROSSCURSOR%NOTFOUND;
      --STARTTIME := SYSDATE;
       WHILE i < 101 LOOP
      i := i + 1;
      INSERT INTO tt VALUES(
      CROSSID,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)),
      SYSDATE
      );
        
      END LOOP;  
      COMMIT;  
      END LOOP;
      CLOSE CROSSCURSOR; 
      EXCEPTION   
      WHEN OTHERS THEN   
    dbms_output.put_line('ERROR');   
      --for i in 1..100 loop
    END INSERTSINGLETABLE;
      

  3.   

    楼上的,如果按你那么改的话,cursor里面的数据只能有一条,而不是cursor里面的所有?
      

  4.   

    也就是说,现在是插入了100条,但是cursor里面有2个crossID,应该是200条才对
      

  5.   

    在FETCH CROSSCURSOR INTO CROSSID;
    后初始化下i变量就可以了i:=1;
      

  6.   

    --这样试试
    CREATE OR REPLACE PROCEDURE INSERTSINGLETABLE(HEXID IN VARCHAR2) IS
      -- maxrecords constant int :=1000;
      i number :=1;
      STARTTIME DATE;
      CROSSID CROSSCONFIG.CROSSID%TYPE;
      CURSOR CROSSCURSOR IS SELECT CROSSID FROM CROSSCONFIG;
    BEGIN
      OPEN CROSSCURSOR;
      LOOP
      FETCH CROSSCURSOR INTO CROSSID;   
      EXIT WHEN CROSSCURSOR%NOTFOUND;
      i:=1;
      WHILE i < 101 LOOP
      INSERT INTO DETECTORDATA VALUES(
      CROSSID,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)),
      SYSDATE,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)),
      TRUNC(DBMS_RANDOM.VALUE (0, 100)),
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      TRUNC(DBMS_RANDOM.VALUE (0, 100)) ,
      HEXID,
      HEXID
      );
      i := i + 1;
      END LOOP;  
      COMMIT;  
      END LOOP;
      EXCEPTION   
      WHEN OTHERS THEN   
      CLOSE CROSSCURSOR;   
      --for i in 1..100 loop
    END INSERTSINGLETABLE;