完整代码如下:
CREATE OR REPLACE PROCEDURE user.temp
AS
 TMP_field1             VARCHAR2(10) ;
 TMP_field2            VARCHAR2(10) ;
BEGIN
  DECLARE CURSOR C1 IS SELECT field1 FROM table1;
  BEGIN
   OPEN C1;
   LOOP
     FETCH C1 INTO TMP_FIELD1;
     EXIT WHEN C1%NOTFOUND;
     SELECT FILED2 INTO TMP_FILED2 FROM TABLE2 WHERE FIELD3=TMP_FIELD1;
     /*这里可能取不到值,因为不满足条件*/
     exception
     when no_data_found then
     null;
     end;
     if tmp_filed2 is not null    then 
     insert into table2 values(tmp_filed2);
     end if;
     
   END LOOP;
   CLOSE C1;
 END; 
END temp;

解决方案 »

  1.   

    SELECT FILED2 INTO TMP_FILED2 FROM TABLE2 WHERE FIELD3=TMP_FIELD1;TMP_FILED2用数组吧,每次循环后得到不同值
      

  2.   

    add another exception in out begin end
      

  3.   

    我找到原因了
    $....$之间的是我加的语句CREATE OR REPLACE PROCEDURE user.temp
    AS
     TMP_field1             VARCHAR2(10) ;
     TMP_field2            VARCHAR2(10) ;
    BEGIN
      DECLARE CURSOR C1 IS SELECT field1 FROM table1;
      BEGIN
       OPEN C1;
       LOOP
         FETCH C1 INTO TMP_FIELD1;
         EXIT WHEN C1%NOTFOUND;
         $begin$
         SELECT FILED2 INTO TMP_FILED2 FROM TABLE2 WHERE FIELD3=TMP_FIELD1;
         /*这里可能取不到值,因为不满足条件*/
         exception
         when no_data_found then
         null;
         end;
         if tmp_filed2 is not null    then 
         insert into table2 values(tmp_filed2);
         end if;
         
       END LOOP;
       CLOSE C1;
     END; 
    END temp;