SMALL
안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
제어문
- if문을 통한 분기 처리 가능
문법
if 조건식 then
true 처리구문
else
false 처리구문
end if;
if 조건식1 then
처리구문1
elsif 조건식2 then
처리구문2
elsif 조건식3 then
처리구문3
[else
기본처리구문]
end if;
응용) 사용자 입력 수에 대한 짝홀 처리
declare
num number := &정수;
begin
if mod(num, 2) = 0 then
dbms_output.put_line(num || '은 짝수입니다.');
else
dbms_output.put_line(num || '은 홀수입니다.');
end if;
end;
/
응용) 사용자 입력 정수에 대한 양수/음수/0 판단하기
declare
num number := &정수;
begin
if num > 0 then
dbms_output.put_line(num || '은 양수입니다.');
elsif num = 0 then
dbms_output.put_line(num || '입니다.');
else
dbms_output.put_line(num || '은 음수입니다.');
end if;
end;
/
응용) 사번을 입력 받고, 해당 사원의 급여와 평균급여 비교결과를 조회
declare
v_salary employee.salary%type;
avg_sal employee.salary%type;
begin
-- 내 급여 조회
select salary
into v_salary
from employee
where emp_id = '&사번';
-- 평균 급여 계산
select avg(salary)
into avg_sal
from employee;
-- 비교
if v_salary > avg_sal then
dbms_output.put_line('평균보다 급여를 많이 받습니다.');
elsif v_salary = avg_sal then
dbms_output.put_line('당신은 평균급여를 받고 있습니다.');
else
dbms_output.put_line('평군보다 급여를 적게 받습니다.');
end if;
exception
when no_data_found then dbms_output.put_line('찾으시는 사원이 존재하지 않습니다.');
end;
/
case 분기문
유형 1)
case 표현식
when 값1 then 처리구문1;
when 값2 then 처리구문2;
...
[else 기본처리구문]
end case;
유형 2)
case
when 조건식1 then 처리구문1;
when 조건식2 then 처리구문2;
...
[else 기본처리구문]
end case;
응용) 가위바위보
accept 가위바위보 prompt '가위1 바위2 보3 중에 하나를 입력하세요'
declare
num number := &가위바위보;
begin
case num
when 1 then dbms_output.put_line('가위');
when 2 then dbms_output.put_line('바위');
when 3 then dbms_output.put_line('보');
end case;
end;
/
응용) 컴퓨터와 가위바위보
accept 가위바위보 prompt '가위1 바위2 보3 중에 하나를 입력하세요'
declare
com number := trunc(dbms_random.value(1, 4)); -- 1.0 이상 ~ 4.0 미만의 실수 반환 (랜덤)
num number := &가위바위보;
begin
dbms_output.put_line('컴퓨터 : ' || com);
dbms_output.put_line('나 : ' || num);
case
when com = num then
dbms_output.put_line('비겼습니다.');
when (num = 1 and com = 3) or (num = 2 and com = 1) or (num = 3 and com = 2) then
dbms_output.put_line('당신이 이겼습니다');
else
dbms_output.put_line('당신이 졌습니다.');
end case;
end;
/
dbms_random.value()를 이용하여 난수 생성 후 가위바위보 게임을 구현하였습니다.
dbms_random.value()는 실수를 반환하므로 trunc를 이용하여 소수점을 잘라내었습니다.
반복문
☞ loop 반복문
1 ~ 5 출력
declare
num number := 1;
begin
-- 무한반복
-- ORA-20000: ORU-10027: buffer overflow, limit of 20000 bytes 탈출조건 명시!!
loop
dbms_output.put_line(num);
num := num + 1;
end loop;
end;
/
loop 반복문은 탈출 조건이 없으면 무한 반복 되므로 반드시 탈출조건을 명시 해줘야 합니다.
declare
num number := 1;
begin
-- 무한반복
-- ORA-20000: ORU-10027: buffer overflow, limit of 20000 bytes 탈출조건 명시!!
loop
dbms_output.put_line(num);
num := num + 1;
exit when num > 5; -- 탈출 구문 필수!!
end loop;
end;
/
exit when을 통해 탈출 구문을 필수로 작성해줘야 합니다.
☞ while loop 반복문
1 ~ 5 출력
declare
num number := 1;
begin
while num <= 5 loop
dbms_output.put_line(num);
num := num + 1;
end loop;
end;
/
while 조건식이 있으므로, 별도의 탈출 구문을 작성해주지 않아도 됩니다.
☞ for in loop 반복문
- 증감 변수를 미리 선언할 필요 없음
- 증가값은 1로 고정 (reverse로 -1 처리는 가능)
- 증감변수에 대해 시작값..종료값을 설정해서 반복 후 자동 탈출
1 ~ 5 출력
declare
begin
for num in 1..5 loop
dbms_output.put_line(num);
end loop;
end;
/
5 ~ 1 출력
declare
begin
-- for num in 1..5 loop
-- dbms_output.put_line(num);
-- end loop;
for num in reverse 1..5 loop
dbms_output.put_line(num);
end loop;
end;
/
1 ~ 5 출력
개행 없이 쭉 나열하기
declare
begin
-- for num in 1..5 loop
-- dbms_output.put_line(num);
-- end loop;
-- for num in reverse 1..5 loop
-- dbms_output.put_line(num);
-- end loop;
for num in 100..105 loop
dbms_output.put(num || ' ');
end loop;
dbms_output.new_line; -- 개행
end;
/
사용자 입력을 받아서 2~9단 하나를 출력
declare
dan number := &단수;
begin
-- 유효성 검사
if dan not between 2 and 9 then
dbms_output.put_line('잘못 입력하셨습니다. 2~9까지의 숫자를 입력하세요.');
return;
end if;
dbms_output.put_line('===== ' || dan || '단 =====');
for num in 1..9 loop
dbms_output.put_line(dan || ' X ' || num || ' = ' || dan*num);
end loop;
end;
/
모든 구구단 조회
begin
for dan in 2..9 loop
dbms_output.put_line('===== ' || dan || '단 =====');
for num in 1..9 loop
dbms_output.put_line(dan || ' * ' || num || ' = ' || dan*num);
end loop;
dbms_output.new_line;
end loop;
end;
/
@출력값
===== 2단 =====
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
...
...
===== 9단 =====
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
응용) 사원 조회
반복문을 통해서 1명씩 조회
declare
erow employee%rowtype;
begin
for num in 200..223 loop
select *
into erow
from employee
where emp_id = num;
dbms_output.put_line(erow.emp_id || ' ' || erow.emp_name || ' ' || erow.phone);
end loop;
end;
/
LIST
'DataBase > Oracle' 카테고리의 다른 글
PL/SQL 객체) STORED PROCEDURE (0) | 2022.05.02 |
---|---|
PL/SQL 객체) STORED FUNCTION (0) | 2022.05.02 |
PL/SQL) DQL과 DML 처리 (0) | 2022.05.02 |
PL/SQL) 자료형 종류 및 변수 종류 (스칼라 변수, 참조 변수 - %type, %rowtype, record) (0) | 2022.05.02 |
PL/SQL) PL/SQL이란?, 익명 블럭 기초 (0) | 2022.05.02 |