본문 바로가기

Database/PL SQL

PL/SQL Tutorial - IF

IF / AND는 너무 잘 알고 있을 것이다. 진리식으로 나타내면 충분하겠지?

X Y IF AND
0 0 0 0
0 1 1 0
1 0 1 0
1 1 1 1

아니 표는 가운데 정렬안됨? 후..<center></center> 태그님 영원하세요

먼저 IF문을 살펴보자.

IF condition THEN
  statements;
END IF;

boolean type는 언제나 true, false, null 값만을 갖는다. 이 점을 이용하여 사용한다.

DECLARE
  n_sales NUMBER;
BEGIN
  n_sales := 200000;
  IF n_sales > 100000 THEN
      DBMS_OUTPUT.PUT_LINE( 'Sales revenue is greater than 100K' );
    END IF;
END;

간단하게 작성해보자. n_sales 라는 애는 100000을 넘으면 text를 출력한다. 여기서는 임의로 값을 넣어서 진짜 그렇게 되는지 확인해보았다.

 이런 경우를 나타낼 수도 있다.

DECLARE
  b_profitable BOOLEAN;
  n_sales NUMBER;
  n_costs NUMBER;
BEGIN
  b_profitable := n_sales > n_costs;
  IF n_sales > n_costs THEN
    b_profitable;
  END IF;
END;

보면 b_profitable이 boolean 형식으로 선언되었다. 그리고 if문의 조건을 보면 n_sales > n_costs 인 것을 알 수 있다. 여기서 나오는 결과값은 boolean이기 때문에 마찬가지로 b_profitable의 값으로 사용할 수 있다. 따라서 이렇게 바꿀 수 있다는 것이다.

DECLARE
  b_profitable BOOLEAN;
  n_sales NUMBER;
  n_costs NUMBER;
BEGIN
  b_profitable := n_sales > n_costs;
  IF b_profitable THEN
    DBMS_OUTPUT.PUT_LINE('TEST');
  END IF;
END;

이걸 출력해보면 이렇게 된다.

DECLARE
  b_profitable BOOLEAN;
  n_sales NUMBER;
  n_costs NUMBER;
BEGIN
  n_sales := 150;
  n_costs := 120;
  b_profitable := n_sales > n_costs;
  IF b_profitable THEN
    DBMS_OUTPUT.PUT_LINE('TEST');
  END IF;
END;
-- TEST

BOOLEAN은 언제나 TRUE, FALSE, NULL만 가지고 있기 때문에 다음과 같이 만들 필요는 없다.

IF b_profitable = TRUE THEN
  DBMS_OUTPUT.PUT_LINE('This sales deal is profitable');
END IF;

이렇게만 작성하면 되는 것이다.

IF b_profitable THEN
  DBMS_OUTPUT.PUT_LINE('This sales deal is profitable');
END IF;

IF문을 배웠으면 무엇이 나올까? 진부하게도 ELSE이다.

IF condition THEN
    statements;
ELSE
    else_statements;
END IF;

이렇게 사용한다.

DECLARE
  n_sales NUMBER;
BEGIN
  n_sales := 10000;
  IF n_sales > 200000 THEN
    n_sales := n_sales * 0.9;
    DBMS_OUTPUT.PUT_LINE(n_sales);
  ELSE
    n_sales := n_sales * 0.95;
    DBMS_OUTPUT.PUT_LINE(n_sales);
  END IF;
END;

당연하게도 여러 조건을 넣을 수 있다.

IF condition_1 THEN
  statements_1
ELSIF condition_2 THEN
  statements_2
[ ELSIF condition_3 THEN
    statements_3
]
...
[ ELSE
    else_statements
]
END IF;

너무 당연하게도 중첩도 할 수 있다.

IF condition_1 THEN
    IF condition_2 THEN
        nested_if_statements;
    END IF;
ELSE
    else_statements;
END IF; 

'Database > PL SQL' 카테고리의 다른 글

PL/SQL Tutorial - LOOP  (0) 2019.05.08
PL/SQL Tutorial - NULL  (0) 2019.05.07
PL/SQL Tutorial - GOTO  (0) 2019.05.07
PL/SQL Tutorial - CASE  (0) 2019.04.30
PL/SQL Tutorial - Type, Variables  (0) 2019.04.30