본문 바로가기

Database/PLSQL

011 - [Oracle PL/SQL] Nested Loops and Labels

<샘플코드에서 사용한 데이터는 HR 스키마이고, 오라클 설치시 생성할 수 있는 기본 스키마 입니다>

 

이중 for 문에 대해서 알아보겠습니다. 일반적인 프로그래밍에서 사용하는 이중 for문과 유사합니다.

 

declare
  v_star varchar2(100);
begin
  for i in 1..5
  loop
    for j in 1..i
    loop
    v_star:=v_star||'*';
    
    end loop;
    dbms_output.put_line(v_star); 
    v_star:=null;
  end loop;
end;

--------------------------------
*
**
***
****
*****

 

 

 

# 위의 for문 샘플에서 이름을 지정한 샘플입니다.

declare
    v_star varchar2(100);
begin
    <<outer_loop>>
    for i in 1..5
    loop
        <<inner_loop>>
        for j in 1..i
        loop
        v_star:=v_star||'*';
        end loop inner_loop;

        dbms_output.put_line(v_star); 
        v_star:=null;
    end loop outer_loop;
end;
-----------------------------------------
*
**
***
****
*****

 

 

 

# inner_loop에서 exit한 경우, outer_loop로 이동한다.
declare
v_star varchar2(100);
begin
    <<outer_loop>>
    for i in 1..5
    loop
        <<inner_loop>>
        for j in 1..i
        loop
            v_star:=v_star||'*';
            exit;
        end loop inner_loop;
        
        dbms_output.put_line(v_star); 
        v_star:=null;
    end loop outer_loop;
end;

---------------------------------------------------------
*
*
*
*
*

 

 

 

# label을 이용하면 2개의 for문을 한번에 벗어날수 있다.

declare
    v_star varchar2(100);
begin
    <<outer_loop>>
    for i in 1..5
    loop
        <<inner_loop>>
        for j in 1..i
        loop
            v_star:=v_star||'*';
            exit outer_loop when i=3 ; # outer_loop까지 한번에 exit 가능함.
        end loop inner_loop;
        
        dbms_output.put_line(v_star); 
        v_star:=null;
    end loop outer_loop;
end;
--------------------------------------
*
**

 

 

 

 

 

 

'Database > PLSQL' 카테고리의 다른 글

013 - [Oracle PL/SQL] Records - %type  (0) 2024.02.10
012 - [Oracle PL/SQL] Continue Statement  (0) 2024.02.09
010 - [Oracle PL/SQL] For Loop  (0) 2024.02.09
009 - [Oracle PL/SQL] While Loop  (0) 2024.02.08
008 - [Oracle PL/SQL] Basic Loop  (0) 2024.02.08