declare i int:=1; begin loop dbms_output.put_line('输出i='||i); if i=10 then goto end_loop; end if; i:=i+1; end loop; dbms_output.put_line('循环结束'); <<end_loop>> --dbms_output.put_line('over'); end;请问去掉注释部分为什么报错?
SQL> edi 已写入 file afiedt.buf 1 declare 2 i int:=1; 3 begin 4 loop 5 dbms_output.put_line('输出i='||i); 6 if i=10 then 7 goto end_loop; 8 end if; 9 i:=i+1; 10 end loop; 11 dbms_output.put_line('循环结束'); 12 <<end_loop>> 13 dbms_output.put_line('over'); 14* end; SQL> / 输出i=1 输出i=2 输出i=3 输出i=4 输出i=5 输出i=6 输出i=7 输出i=8 输出i=9 输出i=10 overPL/SQL 过程已成功完成。
The label end_loop in the Example 4-20 is not allowed unless it is preceded by an executable statement. To make the label legal, a NULL statement is added.Example 4-20 Using a NULL Statement to Allow a GOTO to a LabelDECLARE done BOOLEAN; BEGIN FOR i IN 1..50 LOOP IF done THEN GOTO end_loop; END IF; <<end_loop>> -- not allowed unless an executable statement follows NULL; -- add NULL statement to avoid error END LOOP; -- raises an error without the previous NULL END; /
declare i int:=1; begin loop dbms_output.put_line('输出i='||i); if i=10 then goto end_loop; end if; i:=i+1; end loop; dbms_output.put_line('循环结束'); <<end_loop>> --dbms_output.put_line('over'); null; --你的<<end_loop>>标签里没有任何语句是会报错的,如果你不想做任何操作可以用null语句 --不过你的这样可以用while循环,最后不要使用goto语句 end;
label只能放在某个可执行的语句前面,表示将跳转到该执行语句.不能直接跳转到末尾.
没看清你的意思 对于 goto label; .... <<label>> 后面的接上执行语句 或者 null; null; declare i int:=1; begin loop dbms_output.put_line('输出i='||i); if i=10 then goto end_loop; end if; i:=i+1; end loop; dbms_output.put_line('循环结束'); <<end_loop>> null; --dbms_output.put_line('over'); end;
已写入 file afiedt.buf 1 declare
2 i int:=1;
3 begin
4 loop
5 dbms_output.put_line('输出i='||i);
6 if i=10 then
7 goto end_loop;
8 end if;
9 i:=i+1;
10 end loop;
11 dbms_output.put_line('循环结束');
12 <<end_loop>>
13 dbms_output.put_line('over');
14* end;
SQL> /
输出i=1
输出i=2
输出i=3
输出i=4
输出i=5
输出i=6
输出i=7
输出i=8
输出i=9
输出i=10
overPL/SQL 过程已成功完成。
done BOOLEAN;
BEGIN
FOR i IN 1..50 LOOP
IF done THEN
GOTO end_loop;
END IF;
<<end_loop>> -- not allowed unless an executable statement follows
NULL; -- add NULL statement to avoid error
END LOOP; -- raises an error without the previous NULL
END;
/
i int:=1;
begin
loop
dbms_output.put_line('输出i='||i);
if i=10 then
goto end_loop;
end if;
i:=i+1;
end loop;
dbms_output.put_line('循环结束');
<<end_loop>>
--dbms_output.put_line('over');
null;
--你的<<end_loop>>标签里没有任何语句是会报错的,如果你不想做任何操作可以用null语句
--不过你的这样可以用while循环,最后不要使用goto语句
end;
没看清你的意思 对于
goto label;
....
<<label>> 后面的接上执行语句 或者 null;
null;
declare
i int:=1;
begin
loop
dbms_output.put_line('输出i='||i);
if i=10 then
goto end_loop;
end if;
i:=i+1;
end loop;
dbms_output.put_line('循环结束');
<<end_loop>>
null;
--dbms_output.put_line('over');
end;