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 키워드가 필요한 위치에 없습니다.