Database/Oracle
[Oracle] PL/SQL - 제어문 (반복문 / 선택문 / 조건문) 종류와 예제
영보로그
2020. 11. 10. 14:58
반응형
개념 정리
# 제어문
- 반복문
- 선택문
- 조건문
# 조건문
종류 |
형식 |
단일 조건문 | IF(조건문) THEN 처리 END IF; => 비교연산자 (=, !=(<>), <, >, <=, =>), 논리연산자 (NOT,OR,AND) |
선택 조건문 | IF(조건문) THEN 처리 (조건문이 TRUE) ELSE 처리 END IF; |
다중 조건문 | IF(조건문) THEN 처리 ELSIF(조건문) THEN 처리 ELSIF(조건문) THEN 처리 ELSE 처리 END IF; |
선택 | CASE[조건] WHEN 조건 THEN 결과 WHEN 조건 THEN 결과 WHEN 조건 THEN 결과 ELSE 처리 END; |
# 반복문
종류 | 형식 |
while | WHILE 조건 LOOP 처리 END LOOP ; |
for | FOR i IN 1..9 LOOP // 1->9까지 처리 END LOOP; FOR i IN REVERSE 1..9 LOOP // 9->1까지 |
basic (loop) | LOOP 문장 문장 END LOOP ; |
예제
# 단일 조건문 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
--단일 조건문
DECLARE
--선언부(변수선언)
vename emp.ename%TYPE;
vjob emp.job%TYPE;
vdname dept.dname%TYPE;
vdeptno emp.deptno%TYPE;
BEGIN
--구현부
--변수에 값 대입 => :=
SELECT deptno,ename,job INTO vdeptno,vename,vjob
FROM emp
WHERE ename='KING';
IF(vdeptno=10) THEN
vdname:='개발부';
END IF;
IF(vdeptno=20) THEN
vdname:='영업부';
END IF;
IF(vdeptno=30) THEN
vdname:='총무부';
END IF;
--결과값 출력
DBMS_OUTPUT.PUT_LINE('======결과값========');
DBMS_OUTPUT.PUT_LINE('이름:'||vename);
DBMS_OUTPUT.PUT_LINE('부서:'||vdname);
--예외처리
END;
/
|
cs |
# 다중 IF문 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
--다중 IF 문
DECLARE
--선언부(변수선언)
vename emp.ename%TYPE;
vjob emp.job%TYPE;
vdname dept.dname%TYPE;
vdeptno emp.deptno%TYPE;
BEGIN
--구현부
--변수에 값 대입 => :=
SELECT deptno,ename,job INTO vdeptno,vename,vjob
FROM emp
WHERE ename='KING';
IF(vdeptno=10) THEN
vdname:='개발부';
ELSIF(vdeptno=20) THEN
vdname:='영업부';
ELSIF(vdeptno=30) THEN
vdname:='총무부';
END IF;
--결과값 출력
DBMS_OUTPUT.PUT_LINE('======결과값========');
DBMS_OUTPUT.PUT_LINE('이름:'||vename);
DBMS_OUTPUT.PUT_LINE('부서:'||vdname);
--예외처리
END;
/
|
cs |
# 선택 조건문 예제 (1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
-- 선택 조건문 IF~ELSE
-- 성과급이 없습니다.
DECLARE
vename emp.ename%TYPE;
vcomm emp.comm%TYPE;
vsal emp.sal%TYPE;
BEGIN
SELECT ename,comm,sal INTO vename,vcomm,vsal
FROM emp
WHERE ename='SMITH';
-- 연산처리 => NULL값일 경우에는 결과 값이 NULL
IF(vcomm>0) THEN
DBMS_OUTPUT.PUT_LINE(vename||'님의 성과급은'||vcomm||' 입니다.');
ELSE
DBMS_OUTPUT.PUT_LINE(vename||'님의 성과급은 없습니다.');
END IF;
END;
/
|
cs |
# 선택 조건문 예제 (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
-- 선택 조건문 IF~ELSE
-- 성과급이 ㅇㅇ입니다
DECLARE
vename emp.ename%TYPE;
vcomm emp.comm%TYPE;
vsal emp.sal%TYPE;
BEGIN
SELECT ename,comm,sal INTO vename,vcomm,vsal
FROM emp
WHERE ename='MARTIN';
-- 연산처리 => NULL값일 경우에는 결과 값이 NULL
IF(vcomm>0) THEN
DBMS_OUTPUT.PUT_LINE(vename||'님의 성과급은'||vcomm||' 입니다.');
ELSE
DBMS_OUTPUT.PUT_LINE(vename||'님의 성과급은 없습니다.');
END IF;
END;
/
|
cs |
# CASE문 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
-- CASE = TRIGGER
-- 반복문
DECLARE
vempno emp.empno%TYPE;
vename emp.ename%TYPE;
vdeptno emp.deptno%TYPE;
vdname dept.dname%TYPE;
BEGIN
SELECT empno, ename, deptno INTO vempno,vename,vdeptno
FROM emp
WHERE ename='SMITH';
vdname:=CASE vdeptno
WHEN 10 THEN '개발부'
WHEN 20 THEN '총무부'
WHEN 30 THEN '자재부'
WHEN 40 THEN '신입'
END;
DBMS_OUTPUT.PUT_LINE('====결과====');
DBMS_OUTPUT.PUT_LINE('이름:'||vename);
DBMS_OUTPUT.PUT_LINE('사번:'||vempno);
DBMS_OUTPUT.PUT_LINE('부서:'||vdname);
END;
/
|
cs |
# FOR 문 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
-- 1부터 10까지 출력하는 FOR문
BEGIN
FOR i IN 1..10 LOOP
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
END;
/
--10부터 1까지 출력하는 FOR문
BEGIN
FOR i IN REVERSE 1..10 LOOP
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
END;
/
|
cs |
반응형