13.6.5.1 CASE 구문
CASEcase_value
WHENwhen_value
THENstatement_list
[WHENwhen_value
THENstatement_list
] ... [ELSEstatement_list
] END CASE
또는 :
CASE WHENsearch_condition
THENstatement_list
[WHENsearch_condition
THENstatement_list
] ... [ELSEstatement_list
] END CASE
저장 프로그램의 CASE
문은 복잡한 조건절 구문을 구현합니다.
여기에서 설명 된 CASE
명령문은 다른 CASE
식도 존재합니다. 섹션 12.4 "제어 흐름 함수" 를 참조하십시오. CASE
명령문은 ELSE NULL
절을 가질 수 없으며, END
가 아니라 END CASE
로 종료합니다.
첫 번째 구문의 경우 case_value
는 식입니다. 이 값은 각 WHEN
절의 when_value
식 중 하나가 같아 질 때까지 그 표현과 비교됩니다. 동일한 when_value
이 발견되면 해당 THEN
절 statement_list
가 실행됩니다. 어떤 when_value
도 동일하지 않은 경우 ELSE
절 statement_list
가 실행됩니다 (이 조항이 존재하는 경우).
NULL = NULL
은 false이므로이 구문을 NULL
과 동일한 지 여부를 테스트하는 데 사용할 수 없습니다. 섹션 3.3.4.6 "NULL 값 작업" 을 참조하십시오.
두 번째 구문의 경우 각 WHEN
절 search_condition
표현식 중 하나가 true가 될 때까지 그식이 평가 중 하나가 true가되는 시점에서 해당 THEN
절 statement_list
가 실행됩니다. 어떤 search_condition
도 동일하지 않은 경우 ELSE
절 statement_list
가 실행됩니다 (이 조항이 존재하는 경우).
어떤 when_value
도 search_condition
도 테스트 된 값과 일치하지 아니하고 CASE
문에 ELSE
절이 포함되지 않은 경우 Case not found for CASE statement 오류가 발생합니다.
각 statement_list
는 하나 이상의 SQL 문으로 구성됩니다. 빈 statement_list
는 허용되지 않습니다.
어떤 WHEN
절에서도 값이 일치하지 않는 상황을 처리하려면 다음 예제와 같이 빈 BEGIN ... END
블록을 포함 ELSE
를 사용합니다. (여기의 ELSE
절에서 사용되는 들여 쓰기 투명성만을 목적으로하고 있으며, 그 이외의 의미는 없습니다.)
DELIMITER | CREATE PROCEDURE p () BEGIN DECLARE v INT DEFAULT 1; CASE v WHEN 2 THEN SELECT v; WHEN 3 THEN SELECT 0; ELSE BEGIN END; END CASE; END; |