728x90
반응형
SMALL
# CONTINUE 문 현재 루프를 종료하고 다음 루프로 반복하는 문
DECLARE
i NUMBER := 1;
BEGIN
LOOP
IF i = 4 OR i = 8 THEN
i := i + 1;
CONTINUE; -- CONTINUE: 다시 반복
ELSE
dbms_output.put_line(i);
END IF;
i := i + 1;
IF i > 10 THEN
EXIT;
END IF;
END LOOP;
END;
/
# IF 조건문으로 CONTINUE WHEN 절로 변경
DECLARE
i NUMBER := 0;
BEGIN
LOOP
i := i + 1;
CONTINUE WHEN i = 4 or i = 8;
dbms_output.put_line(i);
EXIT WHEN i = 10;
END LOOP;
END;
/
■ WHILE LOOP 문
DECLARE
i number := 1;
BEGIN
WHILE i <= 10 LOOP
DBMS_OUTPUT.PUT_LINE(i);
i := i + 1;
END LOOP;
END;
/
[문제] 1부터 10 까지 출력해주세요. 단, 4와 8 은 제외하고.
방법1)
DECLARE
i number := 1;
BEGIN
WHILE i <= 10 LOOP
IF i != 4 and i != 8 THEN
DBMS_OUTPUT.PUT_LINE(i);
END IF;
i := i + 1;
END LOOP;
END;
/
방법2)
DECLARE
i number := 1;
BEGIN
WHILE i <= 10 LOOP
IF i = 4 or i = 8 THEN
i := i +1;
CONTINUE;
ELSE
DBMS_OUTPUT.PUT_LINE(i);
END IF;
i := i + 1;
END LOOP;
END;
/
# 1부터 100까지의 합 : LOOP문을 WHILE LOOP문으로 변경
DECLARE
v_cnt number := 1; -- 1부터 시작
v_sum number := 0; -- 누적합
BEGIN
WHILE v_cnt <= 100 LOOP
v_sum := v_sum+v_cnt;
v_cnt := v_cnt+1;
END LOOP;
dbms_output.put_line('1부터 100까지의 합 : '||v_sum);
END;
/
■ FOR 문
- 반복횟수(자동)를 알고 있을 때 사용하는 루프문
# FOR 변수명 IN 숫자.. 숫자 : 구간 설정
BEGIN
FOR i IN 1.. 10 LOOP -- 변수명 IN 숫자.. 숫자 : 구간 설정
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
END;
/
# 조건문, 제어문
BEGIN
FOR i IN 1.. 10 LOOP -- 변수명 IN 숫자.. 숫자 : 구간 설정
CONTINUE WHEN i = 4; -- 4를 제외
DBMS_OUTPUT.PUT_LINE(i);
EXIT WHEN i = 5; -- 5까지 출력
END LOOP;
END;
/
# FOR 변수명 IN 변수명 .. 변수명
DECLARE
v_start number := 1;
v_end number := 10;
BEGIN
FOR i IN v_start .. v_end LOOP -- 변수명 IN 변수명 .. 변수명 : 구간 설정
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
END;
/
# 구간설정할 때에는 NULL 설정 할때
- 오류발생 ORA-06502: PL/SQL: numeric or value error
DECLARE
v_start number := 1;
v_end number := NULL;
BEGIN
FOR i IN v_start .. v_end LOOP
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
END;
/
# LOOP 문을 FOR 문으로 변경
1) 100까지의 합
DECLARE
v_cnt number := 1; -- 1부터 시작
v_sum number := 0;
BEGIN
FOR v_cnt IN 1..100 LOOP
v_sum := v_sum+v_cnt;
END LOOP;
dbms_output.put_line('1부터 100까지의 합 : '||v_sum);
END;
/
2) 4, 8 을 제외
방법A)
DECLARE
i number := 1;
BEGIN
FOR i IN 1..10 LOOP
IF i != 4 and i != 8 THEN
DBMS_OUTPUT.PUT_LINE(i);
END IF;
END LOOP;
END;
/
방법B)
DECLARE
i number := 1;
BEGIN
FOR i IN 1..10 LOOP
IF i = 4 or i = 8 THEN
-- i := i + 1; 오류발생_카운트 변수에 다른 값을 변경할 수 없다.
CONTINUE;
ELSE
DBMS_OUTPUT.PUT_LINE(i);
END IF;
END LOOP;
END;
/
[문제] 2단을 출력해 주세요.
1) 기본 LOOP문
DECLARE
a number := 0; -- NUM
b number := 2; -- DAN
c number := 1; -- 결과값
BEGIN
LOOP
a := a+1;
c := a*b;
DBMS_OUTPUT.PUT_LINE(a||'*'||b||'='||c);
EXIT WHEN a = 9;
END LOOP;
END;
/
정답)
DECLARE
i number := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('2 * '|| i ||' = '|| 2*i);
EXIT WHEN i = 9;
i := i+1;
END LOOP;
END;
/
2) while loop문
DECLARE
a number := 1; -- NUM
b number := 2; -- DAN
c number := 1; -- 결과값
BEGIN
WHILE a <= 9 LOOP
c := a*b;
DBMS_OUTPUT.PUT_LINE(a||'*'||b||'='||c);
a := a+1;
END LOOP;
END;
/
정답)
DECLARE
i number := 1;
BEGIN
while i <= 9 LOOP
DBMS_OUTPUT.PUT_LINE('2 * '|| i ||' = '|| 2*i);
i := i+1;
END LOOP;
END;
/
3) for loop문
declare
a number := 1;
b number := 2;
c number := 1;
begin
FOR A IN 1..9 LOOP
c := a*b;
DBMS_OUTPUT.PUT_LINE(a||'*'||b||'='||c);
END LOOP;
end;
/
정답)
BEGIN
for i in 1..9 LOOP
DBMS_OUTPUT.PUT_LINE('2 * '|| i ||' = '|| 2*i);
END LOOP;
END;
/
[문제] 구구단 출력하세요.
1) 기본 LOOP문
DECLARE
dan number := 2;
j number; --기수 변수
BEGIN
LOOP -- dan 반복문 (main loop)
j := 1;
LOOP -- 기수 LOOP문 (sub loop)
dbms_output.put_line(dan||' * '||j||' = '||dan*j);
EXIT WHEN j = 9;
j := j +1;
END LOOP; -- 기수 LOOP문 end
EXIT WHEN dan = 9;
dan := dan + 1;
END LOOP; -- dan LOOP문 end
END;
/
2) WHILE LOOP문
DECLARE
dan number := 2;
j number; --기수 변수
BEGIN
WHILE dan <= 9 LOOP -- dan 반복문 (main loop)
j := 1;
WHILE j <= 9 LOOP -- 기수 LOOP문 (sub loop)
dbms_output.put_line(dan||' * '||j||' = '||dan*j);
j := j +1;
END LOOP; -- 기수 LOOP문 end
dan := dan + 1;
END LOOP; -- dan LOOP문 end
END;
/
3) FOR문
BEGIN
FOR dan IN 2..9 LOOP -- dan 반복문 (main loop)
FOR j IN 1..9 LOOP -- 기수 반복문 (sub loop)
dbms_output.put_line(dan||' * '||j||' = '||dan*j);
END LOOP; -- 기수 LOOP문 end
END LOOP; -- dan LOOP문 end
END;
/
[문제] 급여를 입력값을 받아서 1000당 * 하나를 출력해주세요
<화면 출력>
급여는 5500 당신의 별은 *****
방법1)
(Run SQL Command Line)
set SERVEROUTPUT ON
L
var b_sal number
execute :b_sal :=5500
print :b_sal
DECLARE
v_num number := trunc(:b_sal/1000);
v_star varchar2(20);
BEGIN
FOR i IN 1.. v_num LOOP
v_star := v_star||'*';
END LOOP;
dbms_output.put_line('급여는 '||:b_sal||' 당신의 별은 '||v_star);
END;
/
방법2)
DECLARE
v_sal number := 5500;
v_num number := trunc(v_sal/1000);
v_str varchar2(10) := NULL;
BEGIN
FOR i IN 1.. v_num LOOP
v_str := v_str||'*';
END LOOP;
dbms_output.put_line('급여는 '||v_sal||' 당신의 별은 '||v_str);
END;
/
728x90
반응형
LIST
'Data Base > PL SQL' 카테고리의 다른 글
231030 PL/SQL CURSOR, 명시적 CURSOR (0) | 2023.10.30 |
---|---|
231030 PL/SQL 중첩테이블(NESTED TABLE) , VARRAY(VARIABL-SIZE ARRAY) 가변길이의 배열방식, 2차원 배열 (1) | 2023.10.30 |
231027 PL/SQL 조합 데이터 _ 1차원 배열, 레코드 변수, 배열 변수 (1) | 2023.10.30 |
231025 PL/SQL 조건제어문 (1) | 2023.10.25 |
231025 PL/SQL( Procedure Language Structured Query Language ) (0) | 2023.10.25 |