declare
  i integer;
begin
  for i in 1 .. 10 loop
   
   dbms_output.put_line(to_char(i));
    goto errors;
    <<errors>>
    dbms_output.put_line(to_char(10 + i));
    
    null;
  end loop;
end;
------------------------------------------
declare
  i integer;
begin
  for i in 1 .. 10 loop
   
   dbms_output.put_line(to_char(i));
    goto errors;
    
    dbms_output.put_line(to_char(10 + i));
    <<errors>>
    null;
  end loop;
end;
为何结果不一样呢?

解决方案 »

  1.   

    当然不一样了,第二段程序因为goto语句的作用,dbms_output.put_line(to_char(10 + i));这条被跳过不能执行了。
      

  2.   

    --label标号位置不一致
    <<errors>> 
      

  3.   

    goto errors; 直接运行errors 语句标号后面的语句你第一个的errors 语句标号是包含dbms_output.put_line(to_char(10 + i));
    第二个的包含  所以出现 第一个是  1 11 2 12 ...... 10 20这样的结果第二个就是 1 2........10