(파일명 20231102_02_scott(plsql))
■ LOOP 반복문
- 조건과 상관없이 무조건 반복하는 구문
■ 형식 및 구조
/*
LOOP
-- 실행문
EXIT WHEN 조건; -- 조건이 참인 경우 반복문을 빠져나간다.
END LOOP;
*/
■ LOOP문 예제
-- 1 부터 10 까지의 수 출력(LOOP문 활용)
DECLARE
N NUMBER;
BEGIN
N := 1;
LOOP
DBMS_OUTPUT.PUT_LINE(N);
EXIT WHEN N >= 10;
N := N + 1; -- N++;, N+=1; 자바로 치자면 이것들과 같음
END LOOP;
END;
--==>>
/*
1
2
3
4
5
6
7
8
9
10
PL/SQL 프로시저가 성공적으로 완료되었습니다.
*/
■ WHILE 반복문
- 제어 조건이 TRUE 인 동안 일련의 문장을 반복하기 위해 WHILE LOOP 구문을 사용한다.
- 조건은 반복이 시작되는 시점에 체크하게 되어 LOOP 내의 문장이 한 번도 수행되지 않을 수 있다.
- LOOP를 시작할 때 조건이 FALSE 이면, 반복 문장을 탈출하게 된다.
■ 형식 및 구조
/*
WHILE 조건 LOOP -- 조건이 참인 경우 반복 수행
-- 실행문;
END LOOP;
*/
■ WHILE문 예시
-- 1부터 10까지의 수 출력 (WHILE LOOP 문 활용)
DECLARE
N NUMBER;
BEGIN
N := 1;
WHILE N <=10 LOOP
DBMS_OUTPUT.PUT_LINE(N);
N := N+1;
END LOOP;
END;
DECLARE
N NUMBER;
BEGIN
N := 0;
WHILE N < 10 LOOP
N := N+1;
DBMS_OUTPUT.PUT_LINE(N);
END LOOP;
END;
--==>>
/*
1
2
3
4
5
6
7
8
9
10
PL/SQL 프로시저가 성공적으로 완료되었습니다.
*/
■ FOR 반복문
- 『시작수』 에서 1씩 증가하여 『끝냄수』가 될 때 까지 반복 수행.
■ 형식 및 구조
/*
FOR 카운터 IN [REVERSE] 시작수 .. 끝냄수 LOOP
-- 실행문;
END LOOP;
*/
■ FOR 반복문 예시
DECLARE
N NUMBER;
BEGIN
FOR N IN 1 .. 10 LOOP
DBMS_OUTPUT.PUT_LINE(N);
END LOOP;
END;
--==>>
/*
1
2
3
4
5
6
7
8
9
10
PL/SQL 프로시저가 성공적으로 완료되었습니다.
*/
■ 반복문 실습1
--○ 사용자로부터 임의의 단(구구단)을 입력받아
-- 해당 단수의 구구단을 출력하는 PL/SQL 구문을 작성한다.
/*
실행 예)
바인딩 변수 입력 대화창 → 단을 입력하세요 : 2
2 * 1 = 2
2 * 2 = 4
:
2 * 9 = 18
*/
-- 1. LOOP문
ACCEPT INPUT PROMPT '단을 입력하세요';
DECLARE
DAN NUMBER := &INPUT;
N NUMBER;
M NUMBER;
BEGIN
N := 1;
LOOP
M := DAN * N;
DBMS_OUTPUT.PUT_LINE(DAN || ' * ' || N || ' = ' || M);
N := N+1;
EXIT WHEN N > 9;
END LOOP;
END;
-- 2. WHILE LOOP문
ACCEPT INPUT PROMPT '단을 입력하세요';
DECLARE
DAN NUMBER := &INPUT;
N NUMBER;
M NUMBER;
BEGIN
N := 1;
WHILE N < 10 LOOP
M := DAN * N;
DBMS_OUTPUT.PUT_LINE(DAN || ' * ' || N || ' = ' || M);
N := N + 1;
END LOOP;
END;
-- 3. FOR LOOP
ACCEPT INPUT PROMPT '단을 입력하세요';
DECLARE
DAN NUMBER := &INPUT;
N NUMBER;
M NUMBER;
BEGIN
FOR N IN 1 .. 9 LOOP
M := DAN * N;
DBMS_OUTPUT.PUT_LINE(DAN || ' * ' || N || ' = ' || M);
END LOOP;
END;
■ 반복문 실습2
--○ 구구단 전체(2단~9단)를 출력하는 PL/SQL 구문을 작성한다.
-- 단, 이중 반복문(반복문의 중첩) 구문을 활용한다.
/*
실행 예)
==[2단]==
2 * 1 = 2
2 * 2 = 4
:
==[3단]==
:
9 * 9 = 81
*/
-- 1. LOOP 문
DECLARE
DANSU NUMBER; -- 구구단의 단을 나타낼 변수
N NUMBER; -- 1씩 증가할 변수
BEGIN
DANSU := 2;
LOOP
DBMS_OUTPUT.PUT_LINE('==[' || DANSU || '단]==');
N := 1;
LOOP
DBMS_OUTPUT.PUT_LINE(DANSU || ' * ' || N || ' = ' || DANSU*N);
N := N + 1;
EXIT WHEN N > 9;
END LOOP;
DANSU := DANSU + 1;
EXIT WHEN DANSU > 9;
DBMS_OUTPUT.PUT_LINE('');
END LOOP;
END;
-- 2. WHILE LOOP 문
DECLARE
DANSU NUMBER; -- 구구단의 단을 나타낼 변수
N NUMBER; -- 1씩 증가할 변수
BEGIN
DANSU := 2;
WHILE DANSU < 10 LOOP
DBMS_OUTPUT.PUT_LINE('==[' || DANSU || '단]==');
N := 1;
WHILE N < 10 LOOP
DBMS_OUTPUT.PUT_LINE(DANSU || ' * ' || N || ' = ' || DANSU*N);
N := N + 1;
END LOOP;
DANSU := DANSU + 1;
DBMS_OUTPUT.PUT_LINE('');
END LOOP;
END;
-- 3. FOR LOOP 문
DECLARE
DANSU NUMBER; -- 구구단의 단을 나타낼 변수
N NUMBER; -- 1씩 증가할 변수
BEGIN
FOR DANSU IN 2 .. 9 LOOP
DBMS_OUTPUT.PUT_LINE('==[' || DANSU || '단]==');
FOR N IN 1 .. 9 LOOP
DBMS_OUTPUT.PUT_LINE(DANSU || ' * ' || N || ' = ' || DANSU*N);
END LOOP;
DBMS_OUTPUT.PUT_LINE('');
END LOOP;
END;