본문 바로가기

ABAP 프로그래밍 개념/OPEN SQL

CASE Function 1 : Simple Case

OPEN SQL에서 Case문의 구별은 Simple case와 Complex case로 구분지을 수 있습니다.


Simple Case


... CASE operand
         WHEN operand1 THEN result1
        [WHEN operand2 THEN result2]
         ...
        [ELSE resultn]
    END ...


Simple Case Ditinction (Open SQL에서 간단한 경우)는 SQL 식으로, 피연산자(operand)의 값과 피연산자 operand1, operand2 등을 비교하고, 첫 번째 THEN 이후에 비교가 참인 경우 결과로 피연산자 result를 생성합니다. 일치하는 경우가 없으면 ELSE 뒤에 지정된 결과가 선택됩니다. ELSE가 지정되지 않은 경우 결과는 제로(Zero) 값이 됩니다.

피연산자 operand, operand1, operand2 등과 결과 result1, result2 등은 모든 SQL 식일 수 있으며, 열(column), 리터럴(literal), 호스트 변수(host variable) 및 호스트 식(host expression)을 포함합니다. 이들은 ACCP, DF16_SCL (구식), DF34_SCL (구식), LCHR, LRAW, PREC, RAWSTRING 및 STRING을 제외한 모든 사전 유형을 가질 수 있습니다. 리터럴(Literal), 호스트 변수 및 호스트 식은 문자열 및 xstring을 제외한 모든 ABAP 유형을 가질 수 있습니다.

피연산자 operand의 데이터 유형은 피연산자 operand1, operand2 등의 데이터 유형과 비교 가능해야 합니다. 그렇지 않은 경우 정적으로 지정된 유형은 구문 오류를 발생시키고 동적으로 지정된 유형은 CX_SY_DYNAMIC_OSQL_SEMANTICS 클래스의 예외를 발생시킵니다. 결과도 공통 결과 유형을 생성하기 위해 호환되어야 합니다. 결과 result1, result2 등의 데이터 유형은 동일하거나 다른 모든 데이터 유형의 값을 완전히 표현할 수 있어야 합니다. 결과는 가장 큰 값 범위를 가진 항목의 사전 유형을 가지게 됩니다.

SAP Example : Simple Case

마일에서 킬로미터로 거리를 변화하는 방법을 SAP Docu에서 제공한 예시가 있습니다. Converision Factor는  호스트 변수로 지정되며, 해당 값은 이미 SELECT 문에서 SQL 식을 사용하여 계산되었습니다. 이 작업은 WITH 문의 하위 쿼리에서 일반적으로 수행할 수도 있습니다.

단위 마스터 테이블인 T006 테이블에서 MILE에 대하여 단위 변환을 하여 factor라는 변수에 담아두고,
SPFLI 테이블에서 distid에 대하여 Mile인 경우 factor라는 변수를 곱해주고 그렇지 않은 경우에는 'KM'이므로 그래도 사용한다는 예시 입니다.

SELECT SINGLE
       FROM t006
       FIELDS division( zaehl,nennr * 1000,2 ) AS factor
       WHERE msehi = 'MI'
       INTO @DATA(factor).

SELECT FROM spfli
       FIELDS carrid,
              connid,
              cityfrom,
              cityto,
              CASE distid
                   WHEN 'MI' THEN distance * @factor
                   ELSE distance
              END AS distance,
       'KM' AS distid
       WHERE distid = 'KM' OR distid = 'MI'
       ORDER BY carrid, connid
       INTO TABLE @DATA(result).

 

 

SAP Example2 : Simple Case with Chaining

DEMO_EXPRESSIONS 테이블을 이용하여, 간단한 값을 통해 CASE 문 조건에 따라 Then 결과를 묶을수(Chaining)있는 예시입니다.

 DELETE FROM demo_expressions.

  INSERT demo_expressions FROM TABLE @( VALUE #(
    ( id = 'x' char1 = 'aaaaa' char2 = 'bbbbb' )
    ( id = 'y' char1 = 'xxxxx' char2 = 'yyyyy' )
    ( id = 'z' char1 = 'mmmmm' char2 = 'nnnnn' ) ) ).

  DATA(else) = 'fffff'.

  SELECT id, char1, char2,
         CASE char1
           WHEN 'aaaaa' THEN ( char1 && char2 )
           WHEN 'xxxxx' THEN ( char2 && char1 )
           ELSE @else
         END AS text
         FROM demo_expressions
         INTO TABLE @DATA(results).

  cl_demo_output=>display( results ).

 

반응형

'ABAP 프로그래밍 개념 > OPEN SQL' 카테고리의 다른 글

COALESCE Function  (2) 2023.09.04
CASE Function 2 : Complex Case  (0) 2023.09.03
String Function  (0) 2023.08.09
Numeric Function  (0) 2023.08.05
OPEN SQL의 사용  (0) 2023.08.05