DATOR


ORACLE Conditional Compilation($IF ~ $ELSE ~ $END) SQL


C 나 C++ 등의 프로그래밍 언어에서 사용하는 #ifdef 라는 키워드가 있다.

특정 값이 정의되어 있는 지에 따라 컴파일러의 동작방식을 지시할 수 있는 방법인데, ORACLE PL/SQL에서도 "$IF" 지시자로 유사한 방법을 활용할 수 있다. (10g R2 부터)

 

run-time에 동작을 제어하는 방법이 "IF" 라고 하면, "$IF"는 compile-time의 동작을 제어한다.

즉, 특정 조건에 따라 $IF ~ $END의 code block이 compile 될지의 동작을 제어하고, compile되지 않은 block은 실행코드상에 아예 존재하지 않으므로 최적화하는 용도로 주로 이용된다.

 

기본적인 문법은 다음과 같다.


$IF boolean_static_expression $THEN text
  [ $ELSIF boolean_static_expression $THEN text ]
  [ $ELSE text ]
$END

 


$IF block에 사용되는 expression은 다음 중 하나일 수 있다.

 

1. Boolean Static Expressions
•TRUE, FALSE, and the literal NULL

•x > y, x < y, x >= y, x <= y, x = y, and x <> y where x and y are PLS_INTEGER static expressions

•NOT x, x AND y, x OR y, x > y, x >= y, x = y, x <= y, x <> y where x and y are BOOLEAN static expressions

•x IS NULL and x IS NOT NULL where x is a static expression

 

2. PLS_INTEGER Static Expressions
•-2147483648 to 2147483647, and the literal NULL

 

3. VARCHAR2 Static Expressions
•'abcdef' and 'abc' || 'def'

•literal NULL

•TO_CHAR(x), where x is a PLS_INTEGER static expression

•TO_CHAR(x f, n) where x is a PLS_INTEGER static expression andf and n are VARCHAR2 static expressions

•x || y where x and y are VARCHAR2 or PLS_INTEGER static expressions

 

4.Static Constants
package 내에서 상수로 정의된 값

문법: static_constant CONSTANT datatype := static_expression;

•The declared datatype and the type of static_expression are the same

•static_expression is a static expression

•datatype is either BOOLEAN or PLS_INTEGER


http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/fundamentals.htm#BABIHIHF 의 간단한 사례를 살펴보자.


CREATE OR REPLACE PROCEDURE debug (p_text  IN  VARCHAR2) AS
  $IF $$debug_on $THEN
    l_text  VARCHAR2(32767);
  $END
BEGIN
  $IF $$debug_on $THEN
    $IF DBMS_DB_VERSION.VER_LE_10_1 $THEN
      l_text := SUBSTR(p_text, 1 ,233);
    $ELSE
      l_text := p_text;
    $END
    $IF $$show_date $THEN
      DBMS_OUTPUT.put_line(TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || ': ' || l_text);
    $ELSE
      DBMS_OUTPUT.put_line(p_text);
    $END
  $ELSE
    NULL;
  $END
END debug;

Boolean 식에 사용된 변수는 두가지이다.

1. debug_on : l_text 변수 선언과 디버그 메시지 출력 코드를 컴파일할지 여부 결정

2. show_date : 디버그 메시지에 현재날짜와 시각을 포함시킬지 여부 결정

 

 

※ 읽어보기

1. Conditional Compilation

URL: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/fundamentals.htm#BABIHIHF

 

2. Conditional Compilation in Oracle 10g Database Release 2

URL: http://www.oracle-base.com/articles/10g/ConditionalCompilation_10gR2.php

 

TAG

Leave Comments


profile기술 너머의 통찰 

Recent Trackback