개발 수업/DB
[PL/SQL] PL/SQL구성요소(상수),PL/SQL 제어문
오늘 하루s
2023. 6. 16. 18:20
728x90
더보기
Day34. 230616
PL/SQL구성요소
상수
한 번 값을 할당하면 변하지 않음.
상수명 CONSTANT 데이터타입 := 초기값;
ex) v_num CONSTANT NUMBER:=10;
PL/SQL 제어문
IF문
IF 조건1 THEN
--조건1만족 실행코드
[ELSIF 조건2 THEN]
--조건2만족 실행코드
[ELSIF 조건N THEN]
--조건N만족 실행코드
[ELSE]
조건X 실행코드
END IF;
예1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
DECLARE
v_num1 NUMBER:=10;
v_num2 NUMBER:=20;
BEGIN
IF v_num1 > v_num2 THEN
DBMS_OUTPUT.PUT_LINE('조건1만족');
ELSIF v_num1 < v_num2 THEN
DBMS_OUTPUT.PUT_LINE('조건2만족');
ELSIF v_num1 = v_num2 THEN
DBMS_OUTPUT.PUT_LINE('조건3만족');
ELSE
DBMS_OUTPUT.PUT_LINE('조건불일치');
END IF;
END;
/
|
cs |
예2)
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
|
DECLARE
v_num1 NUMBER:=10;
v_num2 NUMBER:=20;
BEGIN
v_num1:=dbms_random.value(10,120); --난수
v_num2:=dbms_random.value(10,120);
DBMS_OUTPUT.PUT_LINE('v_num1='||v_num1);
DBMS_OUTPUT.PUT_LINE('v_num2='||v_num2);
v_num1:=ROUND(v_num1,-1); --ROUND(v_num1,0):소수점 첫번째 자리에서 반올림.
v_num2:=ROUND(v_num2,-1);
DBMS_OUTPUT.PUT_LINE('ROUND적용 후 v_num1='||v_num1);
DBMS_OUTPUT.PUT_LINE('ROUND적용 후 v_num2='||v_num2);
IF v_num1 > v_num2 THEN
DBMS_OUTPUT.PUT_LINE('조건1만족');
ELSIF v_num1 < v_num2 THEN
DBMS_OUTPUT.PUT_LINE('조건2만족');
ELSIF v_num1 = v_num2 THEN
DBMS_OUTPUT.PUT_LINE('조건3만족');
ELSE
DBMS_OUTPUT.PUT_LINE('조건불일치');
END IF;
END;
/
|
cs |
- dbms_random.value(값1,값2) : 값1~값2 범위에 있는 난수발생
예3)
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
|
DECLARE
v_ename varchar2(30):=null;
v_sal NUMBER:=0;
v_deptno NUMBER:=0;
BEGIN
v_deptno:=round(dbms_random.value(10,30),-1);
select ename,sal,deptno
INTO v_ename,v_sal,v_deptno
from emp
where deptno=v_deptno and rownum=1;
DBMS_OUTPUT.PUT_LINE(v_ename);
DBMS_OUTPUT.PUT_LINE(v_sal);
DBMS_OUTPUT.PUT_LINE(v_deptno);
IF v_sal between 1 and 1000 THEN
DBMS_OUTPUT.PUT_LINE('낮음');
ELSIF v_sal between 1001 and 2000 THEN
DBMS_OUTPUT.PUT_LINE('중간');
ELSIF v_sal between 2001 and 3000 THEN
DBMS_OUTPUT.PUT_LINE('높음');
ELSE
DBMS_OUTPUT.PUT_LINE('최상위');
END IF;
END;
/
|
cs |
LOOP문
LOOP
--반복실행문
EXIT [WHEN 조건];
END LOOP;
예) 반복실행문 3*1=3 ... 3*9=27
1
2
3
4
5
6
7
8
9
10
11
12
|
DECLARE
v_num1 number:=3;
v_num2 number:=1;
BEGIN
LOOP
--반복실행문 3*1=3 3*9=27
DBMS_OUTPUT.PUT_LINE(v_num1||'*'||v_num2||'='||v_num1*v_num2);
v_num2:=v_num2+1;
EXIT WHEN v_num2>9;
END LOOP;
END;
/
|
cs |
WHILE문
WHILE 조건
LOOP
--반복실행문
END LOOP;
예) 5*1=5... 5*9=45
1
2
3
4
5
6
7
8
9
10
11
12
|
DECLARE
v_num1 number:=5;
v_num2 number:=1;
BEGIN
WHILE v_num2<=9
--반복실행문 5*1=5 5*9=45
LOOP
DBMS_OUTPUT.PUT_LINE(v_num1||'*'||v_num2||'='||v_num1*v_num2);
v_num2:=v_num2+1;
END LOOP;
END;
/
|
cs |
FOR문
FOR 인덱스 IN [REVERSE] 초기값..최종값
LOOP
--반복실행문
END LOOP;
예) 19*1=5... 19*9=171
1
2
3
4
5
6
7
8
9
10
|
DECLARE
v_num1 number:=19;
BEGIN
FOR v_num2 IN REVERSE 1..9
--반복실행문 19*1=5 19*9=171
LOOP
DBMS_OUTPUT.PUT_LINE(v_num1||'*'||v_num2||'='||v_num1*v_num2);
END LOOP;
END;
/
|
cs |
REVERSE- > 숫자 거꾸로 출력
728x90