728x90
반응형
SMALL
■ 조건제어문
1. PL/SQL 에서 조건에 따라 선별적으로 작업을 수행할 수 있다.
2. TRUE/FALSE
3. BOOLEAN DATE TYPE ( TRUE, FALSE, NULL )
# 참일 때
DECLARE
v_flag boolean := true;
BEGIN
IF v_flag THEN
dbms_output.put_line('참');
END IF;
END;
/
# 거짓일 때
DECLARE
v_flag boolean := false;
BEGIN
IF v_flag THEN
dbms_output.put_line('참');
END IF;
END;
/
# IF문
DECLARE
v_flag boolean := false;
BEGIN
IF v_flag THEN
dbms_output.put_line('참');
ELSE
dbms_output.put_line('거짓');
END IF;
END;
/
BEGIN
IF true THEN
dbms_output.put_line('참');
ELSE
dbms_output.put_line('거짓');
END IF;
END;
/
# 형식 IF 문
IF 조건 THEN TRUE END IF; |
IF 조건 THEN TRUE ELSE FASLE END IF; |
IF 조건 THEN TRUE ELSE 조건 THEN TRUE ELSE 조건 THEN TRUE ... ELSE 기본값 END IF; |
비교연산자 | 논리연산자 | 기타 비교연산자 | NULL 연산자 |
=, >, >=, <, <=, <>, !=, ^= | NOT, AND, OR | BETWEEN AND, IN, LIKE | IS NULL, IS NOT NULL |
# IF문
DECLARE
v_a number;
BEGIN
IF v_a IS NULL THEN
dbms_output.put_line('변수에 NULL값으로 입력되어 있습니다.');
ELSE
dbms_output.put_line(v_a);
END IF;
END;
/
# IF-ELSIF문
DECLARE
v_num1 number(2) := 10;
v_num2 number(2) := 5;
BEGIN
IF v_num1 >= v_num2 THEN
dbms_output.put_line(v_num1 - v_num2);
ELSIF v_num1 < v_num2 THEN
dbms_output.put_line(v_num2 - v_num1);
END IF;
END;
/
[문제]
v_sal := 10000
v_comm := null;
((v_sal * 12) + (v_sal * 12 * v_comm))
방법1)
DECLARE
v_sal number(8) := 1000;
v_comm number(2,1);
v_annual_salary number(8);
BEGIN
IF v_comm IS NULL THEN
v_annual_salary := v_sal *12;
dbms_output.put_line(v_annual_salary);
ELSE
v_annual_salary := (v_sal *12) + (v_sal *12*v_comm);
dbms_output.put_line(v_annual_salary);
END IF;
END;
/
방법2)
DECLARE
v_sal number(8) := 1000;
v_comm number(2,1);
v_annual_salary number(8);
BEGIN
v_annual_salary := (v_sal *12) + (v_sal *12*nvl(v_comm,0));
dbms_output.put_line(v_annual_salary);
END;
/
# CASE 표현식 ⓐ
DECLARE
v_grade char(1) := upper('a');
v_appraisal varchar2(30);
BEGIN
v_appraisal := CASE v_grade
WHEN 'A' THEN '참 잘했어요'
WHEN 'B' THEN '잘했어요'
WHEN 'C' THEN '다음에 잘해요'
ElSE '니가 사람이야!'
END;
dbms_output.put_line('등급은 '||v_grade||' 평가는 '||v_appraisal);
END;
/
# CASE 표현식 ⓑ
DECLARE
v_grade char(1) := upper('d');
v_appraisal varchar2(30);
BEGIN
v_appraisal := CASE
WHEN v_grade = 'A' THEN '참 잘했어요'
WHEN v_grade IN ('B', 'C') THEN '잘했어요'
WHEN v_grade = 'D' THEN '다음에 잘해요'
ElSE '니가 사람이야!'
END;
dbms_output.put_line('등급은 '||v_grade||' 평가는 '||v_appraisal);
END;
/
■ 반복문
1. LOOP 문
- 조건없이 반복적인 작업 수행, 무한반복문
- exit : 반복문 종료하는 문
# 10까지 출력 ⓐ IF문 위치에 따라 비교연산자가 달라져야 한다.
DECLARE
v_cnt number := 1;
BEGIN
LOOP
dbms_output.put_line(v_cnt);
v_cnt := v_cnt + 1;
IF v_cnt = 11 THEN
exit;
END IF;
END LOOP;
END;
/
# 10까지 출력 ⓑ
DECLARE
v_cnt number := 1;
BEGIN
LOOP
dbms_output.put_line(v_cnt);
IF v_cnt = 10 THEN
exit;
END IF;
v_cnt := v_cnt + 1;
END LOOP;
END;
/
# 10까지 출력 ⓒ
DECLARE
v_cnt number := 1;
BEGIN
LOOP
IF v_cnt = 11 THEN
exit;
END IF;
dbms_output.put_line(v_cnt);
v_cnt := v_cnt + 1;
END LOOP;
END;
/
[문제] 화면에 1~10까지 출력하는 프로그램을 작성해주세요. 단, 4,8 은 출력하지 마세요.
DECLARE
v_cnt number := 1;
BEGIN
LOOP
IF v_cnt NOT IN (4,8) THEN
dbms_output.put_line(v_cnt);
END IF;
v_cnt := v_cnt + 1;
IF v_cnt = 11 THEN
EXIT;
END IF;
END LOOP;
END;
/
내가 작성한 방법은 NOT IN 방법이다.
방법1) 첫 번째 IF문에서 부정비교연산자를 사용해 and 로 연결.
DECLARE
i number := 1;
BEGIN
LOOP
IF i <> 4 and i <> 8 THEN
dbms_output.put_line(i);
END IF;
i := i + 1;
IF i > 10 THEN
EXIT;
END IF;
END LOOP;
END;
/
방법2) = 비교연산자를 사용해서 or 로 연결. 단, 결과값을 null 로 출력.
DECLARE
i number := 1;
BEGIN
LOOP
IF i = 4 or i = 8 THEN
null;
ELSE
dbms_output.put_line(i);
END IF;
i := i + 1;
IF i > 10 THEN
EXIT;
END IF;
END LOOP;
END;
/
방법3) 마지막에 exit 구문을 짧게 하고 싶다 하면 EXIT WHEN 으로 작성.
DECLARE
i number := 1;
BEGIN
LOOP
IF i = 4 or i =8 THEN
null;
ELSE
dbms_output.put_line(i);
END IF;
i := i + 1;
EXIT WHEN i > 10;
END LOOP;
END;
/
문제를 보면 작성하는 순서를 생각할 수 있다!
' 화면에 1~10까지 출력하는 프로그램을 작성해주세요. 단, 4,8 은 출력하지 마세요. '
1. 기본 구문 작성 (기본 중의 기본) |
DECLARE 먼저 작성하고 시작하자! BEGIN END; / |
2. 변수 선언 (문제에서 숫자를 출력하라는 문제이니, TYPE 은 number 로 지정. ) |
DECLARE i number := 1; 화면에 1~10까지 출력하는 프로그램 BEGIN END; / |
3. 반복문 작성 (LOOP 문 화면에 1~10까지 출력해야 하는 것은 일일이 작성할 수 없으니 1부터 10까지 반복해야 한다. ) |
DECLARE i number := 1; BEGIN LOOP END LOOP; 화면에 1~10까지 출력하는 프로그램 LOOP - END LOOP; 짝꿍처럼 쓰자! END; / |
4. 출력문 출력되어야 하는 변수를 써줘야 SQL에서 출력해준다. |
DECLARE i number := 1; BEGIN LOOP dbms_output.put_line(i); 내가 출력해야 하는 것을 작성하자! END LOOP; END; / |
5. 조건문과 증가하는 구문 (1~10까지 출력해야 하니, IF문과 1씩 증가하는 구문을 작성해줘야 한다!) |
DECLARE i number := 1; BEGIN LOOP dbms_output.put_line(i); i : = i + 1; 1씩 증가시켜줘야 한다. IF i > 10 THEN 1부터는 시작했고, 10까지 진행되게 구문을 만들어주자! END IF: END LOOP; END; / |
6. 반복문의 제어 ( exit 작성 ) |
DECLARE i number := 1; BEGIN LOOP dbms_output.put_line(i); i : = i + 1; IF i > 10 THEN exit; 11이 되면 출력이 멈추게 해주는 구문이다. END IF: END LOOP; END; / |
7. 문제에 있는 ' 단, 4,8 은 출력하지 마세요. ' 을 만들어보자! | DECLARE i number := 1; BEGIN LOOP IF i <> 4 and i <> 8 THEN 출력의 제한을 줘야 하니, 부정연산자를 써줘야 한다. dbms_output.put_line(i); END IF; i : = i + 1; IF i > 10 THEN exit; END IF: END LOOP; 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 |
231026 PL/SQL 반복문(CONTINUE문, WHILE LOOP문, FOR) (0) | 2023.10.26 |
231025 PL/SQL( Procedure Language Structured Query Language ) (0) | 2023.10.25 |