二重ループのexit

(8.0.29)

[1]ラベルによる方法

drop procedure proc1;

delimiter //
create procedure proc1()
begin
  declare i int;
  declare j int;

  set i = 1;  
  LOOP1: while i <= 3 do
    set j = 1;
    while j <= 5 do
      select i,j;
      if i = 2 and j = 2 then
        leave LOOP1;
      end if;
      set j = j + 1;
    end while;
    
    set i = i + 1;
  end while LOOP1;
end
//

delimiter ;

call proc1();

 

[2]goto文による方法
使用できない模様

(19c)

[1]ラベルによる方法

set serveroutput on
declare
begin
  <<LOOP1>>
  for i in 1..3 loop  
    for j in 1..5 loop
      dbms_output.put_line('i,j: ' || i ||','|| j);
      exit LOOP1 when( i = 2 and j = 2 );
    end loop;
  end loop;
end;
/

 

[2]goto文による方法

set serveroutput on
declare
begin
  for i in 1..3 loop  
    for j in 1..5 loop
      dbms_output.put_line('i,j: ' || i ||','|| j);
      if i = 2 and j = 2 then
        goto END1;
      end if;
    end loop;
  end loop;
  <<END1>>
  null;
end;
/

 

 

(14)

[1]ラベルによる方法

do $$
declare
begin
  <<LOOP1>>
  for i in 1..3 loop  
    for j in 1..5 loop
      raise info 'i,j: %,%' ,i,j;
      exit LOOP1 when( i = 2 and j = 2 );
    end loop;
  end loop;
end;
$$;

 


[2]goto文による方法
使用できない模様

(2019)

[1]ラベルによる方法
使用できない模様


[2]goto文による方法


begin
set nocount on;
declare @i int;
declare @j int;

set @i = 1;
while (@i <= 3)
  begin
    set @j = 1;
    while (@j <= 5)
      begin
        print '@i,@j: '+cast(@i as varchar)+','+cast(@j as varchar);
        if @i = 2 and @j = 2
          goto END1;
        set @j = @j + 1;
      end;
    set @i = @i + 1;
  end;
end;
END1:
go