본문 바로가기

Database/PL SQL

PL/SQL Tutorial - NULL

PL/SQL에서 NULL은 이렇게 표현한다. NULL은 제어를 전달하는 것을 빼고 아무것도 수행하지 않는다.

NULL;

 

NULL 사용의 장점

- 코드 가독성 향상

- GOTO 문에 대한 타겟 제공

- 서브 프로그램을 위한 placeholders 생성

 

1. 코드 가독성 향상

IF job_title = 'Sales Representative' THEN
    send_email;
END IF;

위 예시는 job_title이 Sales Representative일 때 email을 보내는 IF문이다. 하지만 Sales가 아닌 직업의 경우엔 어떤 일이 벌어질까? 우리는 명시적으로 '아무런 일도' 생기지 않는다는 것을 알고 있지만 어떤 상황에서는 이해가 어려울 수도 있다. 이럴 때에 NULL을 통해 표시해주는 것이다.

IF job_title = 'Sales Representative' THEN
    send_email;
ESLE
    NULL;
END IF;

비슷하게 case 문에서도 사용할 수 있다.

DECLARE
  n_credit_status VARCHAR2( 50 );
BEGIN
  n_credit_status := 'GOOD';
 
  CASE n_credit_status
  WHEN 'BLOCK' THEN
    request_for_aproval;
  WHEN 'WARNING' THEN
    send_email_to_accountant;
  ELSE
    NULL;
  END CASE;
END;

credit_status는 BLOCK, WARNING일 때 작동하고 다른 경우일때는 NULL로 스무스하게 지나간다. 

 

2. GOTO 문에 대한 타겟 제공

 GOTO 문은 <<label>>다음에 실행문이 와야한다. NULL을 쓰면 부담감없이 프로그램을 끝내는 GOTO를 작성할 수 있다.

DECLARE
  b_status BOOLEAN;
BEGIN
  IF b_status THEN
    GOTO end_of_program;
  END IF;
  -- further processing here
  -- ...
  <<end_of_program>>
  NULL;
END;

NULL이 없으면 오류가 발생한다.

//error
DECLARE
  b_status BOOLEAN;
BEGIN
  IF b_status THEN
    GOTO end_of_program;
  END IF;
  -- further processing here
  -- ...
  <<end_of_program>>
END;

//result
오류 보고 -
ORA-06550: 줄 10, 열1:PLS-00103: 심볼 "END"를 만났습니다 다음 중 하나가 기대될 때:
   ( begin case declare exit for goto if loop mod null raise
   return select update while with <식별자>
   <큰 따옴표로 구분된 식별자> <바인드 변수> <<

 

3. 서브 프로그램을 위한 placeholders 생성

 아직 만들지는 않았지만 앞으로는 만들 친구를 위해 자리를 비워둘 수 있다.

CREATE PROCEDURE request_for_aproval( customer_id NUMBER )
AS
BEGIN
  NULL;
END;

식당에서 자리맡는 느낌이다.

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

PL/SQL Tutorial - CONTINUE  (0) 2019.05.08
PL/SQL Tutorial - LOOP  (0) 2019.05.08
PL/SQL Tutorial - GOTO  (0) 2019.05.07
PL/SQL Tutorial - CASE  (0) 2019.04.30
PL/SQL Tutorial - IF  (0) 2019.04.30