단순 CASE 문 평가식 개선

2023. 4. 14.·Oracle/PLSQL

Oracle 23c부터 단순(simple) CASE 문과 CASE 표현식에 단항 조건(dangling predicates)을 사용할 수 있습니다.

The CASE statement is extended in PL/SQL to be consistent with the updated definitions of CASE expressions and CASE statements in the SQL:2003 Standard [ISO03a, ISO03b]. Dangling predicates allow tests other than equality to be performed in simple CASE operations. Multiple choices in WHEN clauses allow CASE operations to be written with less duplicated code.

 

테스트를 위해 아래와 같이 f1 함수를 생성하겠습니다. RETURN 문의 CASE 표현식 WHEN 절에 단항 조건을 사용합니다. 쉼표(,)로 구분하여 다수의 단항 조건을 사용할 수 있으며, 순서대로 단항 조건이 평가됩니다.

-- 1
CREATE OR REPLACE FUNCTION f1 (i_v1 IN NUMBER)
    RETURN VARCHAR2
IS
BEGIN
    RETURN CASE i_v1
               WHEN 1, 3       THEN 'A' -- WHEN 1 THEN 'A' WHEN 3 THEN 'A'
               WHEN <= 5, >= 7 THEN 'B' -- WHEN <= 5 THEN 'B' WHEN >= 7 THEN 'B'
               WHEN NULL       THEN 'C' -- WHTN IS NULL
               ELSE 'D'
           END;
END;
/

 

아래는 f1 함수를 사용한 결과입니다.

-- 2
SELECT c1, f1 (c1) AS f1
  FROM (SELECT NULLIF (ROWNUM, 2) AS c1 FROM XMLTABLE ('1 to 8'));

C1 F1
-- --
 1 A
   C
 3 A
 4 B
 5 B
 6 D
 7 B
 8 B

8 행이 선택되었습니다.

 

해당 기능은 현재까지 PL/SQL에서만 사용할 수 있으며 SQL에서 사용할 수 없습니다.

-- 3
SELECT c1
     , CASE c1
           WHEN 1, 3       THEN 'A'
           WHEN <= 5, >= 7 THEN 'B'
           WHEN NULL       THEN 'C'
           ELSE 'D'
       END AS c2
  FROM (SELECT NULLIF (ROWNUM, 2) AS c1 FROM XMLTABLE ('1 to 8'));

ORA-00923: FROM 키워드가 필요한 위치에 없습니다.
저작자표시 비영리 변경금지 (새창열림)
'Oracle/PLSQL' 카테고리의 다른 글
  • FOR LOOP 문 기능 개선
  • UPDATE 문의 RETURNING INTO 절 개선
  • PL/SQL 오브젝트 컴파일 시 ORA-29275 에러 발생
  • DBMS_XPLAN.FORMAT_* 함수
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 관심을 가져왔습니다. 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며 Oracle 사의 공식적인 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (206)
      • Oracle (177)
        • SQL (36)
        • PLSQL (10)
        • Performance (75)
        • Administration (37)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (7)
      • Exadata (16)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • 공지사항

  • 인기 글

  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정희락
단순 CASE 문 평가식 개선
상단으로

티스토리툴바