CASE 문 Oracle 예제가 포함된 PL/SQL

⚡ 스마트 요약

PL/SQL CASE 문은 IF-THEN-ELSIF 문과 유사하지만 더 명확하게, 선택자에 따라 여러 대안 중에서 하나를 선택합니다. 단순 CASE 문은 선택자 값과 일치하는지 여부를 확인하는 반면, 검색 CASE 문은 각 WHEN 절의 조건을 평가하고 참인 첫 번째 조건을 실행합니다.

  • 🔀 목적 : CASE 문은 불리언 체인 대신 선택자를 사용하여 여러 액션 블록 중에서 하나를 선택합니다.
  • 🎯 선택자: CASE 표현식은 한 번만 평가되고 각 WHEN 값과 비교됩니다.
  • 🔎 검색된 사례: 각 WHEN 절에 완전한 조건을 넣고, 참인 첫 번째 조건을 실행합니다.
  • 🧮 모든 유형: 선택자는 변수, 숫자 또는 산술 표현식이 될 수 있습니다.
  • 🛟 또 다른: 선택 사항인 ELSE 블록은 일치하는 대안이 없을 때 실행됩니다.
  • 🔚 사건 종료: 필수 END CASE 문은 문장을 종료합니다.
  • 🗄️ SQL 친화적: IF 문과 달리 CASE 문은 SQL 문 내에서 직접 사용할 수도 있습니다.

CASE 문 Oracle PL / SQL

CASE 문항이란 무엇인가요?

CASE 문은 IF-THEN-ELSIF 문과 유사하며, 주어진 조건에 따라 사용 가능한 옵션 중에서 하나의 대안을 선택합니다.

  • CASE 문은 부울 표현식 대신 "선택자"를 사용하여 순서를 선택합니다.
  • CASE 문에 있는 표현식의 값은 선택자로 처리됩니다.
  • 해당 표현식은 어떤 유형이든 될 수 있습니다(산술 연산, 변수 등).
  • 각 대안에는 미리 정의된 특정 값(선택자)이 할당되며, 선택자 값이 조건식 값과 일치하는 대안이 실행됩니다.
  • IF-THEN-ELSIF와 달리 CASE 문은 SQL 문에서도 사용할 수 있습니다.
  • CASE 문의 ELSE 블록은 어떤 대안도 선택되지 않았을 때 실행될 순서를 담고 있습니다.

통사론

CASE (expression)
WHEN <value1> THEN action_block1;
WHEN <value2> THEN action_block2;
WHEN <value3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • 위 구문에서 표현식은 어떤 유형이든 될 수 있는 값을 반환합니다.
  • 각 'WHEN' 절은 대안을 나타냅니다. 그리고 .
  • 표현식과 값이 일치하는 'WHEN' 절이 선택되고, 그 절의 값이 결정됩니다. 실행됩니다.
  • 'ELSE' 블록은 선택 사항이며 다음 내용을 포함합니다. 다른 대안이 없을 때 실행합니다.
  • 'END'는 CASE 문단의 끝을 나타내며 CASE 문단에서 필수적인 부분입니다.

예제 1: CASE를 사용한 산술 계산

이 예시에서는 두 숫자 55와 5 사이의 산술 계산을 수행합니다.

DECLARE
a NUMBER := 55;
b NUMBER := 5;
arth_operation VARCHAR2(20) := 'MULTIPLY';
BEGIN
dbms_output.put_line('Program started.');
CASE (arth_operation)
WHEN 'ADD' THEN dbms_output.put_line('Addition of the numbers are: '|| a+b );
WHEN 'SUBTRACT' THEN dbms_output.put_line('Subtraction of the numbers are: '||a-b );
WHEN 'MULTIPLY' THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b );
WHEN 'DIVIDE' THEN dbms_output.put_line('Division of the numbers are:'|| a/b);
ELSE dbms_output.put_line('No operation action defined. Invalid operation');
END CASE;
dbms_output.put_line('Program completed.');
END;
/

Code 설명

  • Code 2행: 변수 'a'를 'NUMBER'로 선언하고 '55'라는 값으로 초기화합니다.
  • Code 3행: 변수 'b'를 'NUMBER'로 선언하고 '5'라는 값으로 초기화합니다.
  • Code 4행: 'arth_operation' 변수를 크기 20의 'VARCHAR2'로 선언하고 'MULTIPLY' 값으로 초기화합니다.
  • Code 6번째 줄: "프로그램이 시작되었습니다"라는 메시지를 출력합니다.
  • Code 7번째 줄: CASE 절은 표현식의 값을 확인합니다. 여기서 'arth_operation'의 값은 'MULTIPLY'이며, 이는 선택자로 처리됩니다.
  • Code 10번째 줄: 'MULTIPLY' 값을 가진 WHEN 절이 선택자와 일치하므로 컨트롤러는 이 액션 블록을 선택하고 '숫자의 곱셈 결과는: 275'를 출력합니다.
  • Code 13번째 줄: CASE 문의 끝을 나타냅니다.
  • Code 14번째 줄: "프로그램이 완료되었습니다"라는 메시지를 출력합니다.

Code 산출

Program started.
Multiplication of the numbers are: 275
Program completed.

검색된 사례 명세서

검색된 CASE 문은 CASE 문과 유사하지만, 선택자를 사용하여 대안을 선택하는 대신 WHEN 절에 조건을 직접 정의합니다.

  • 조건을 만족하는 첫 번째 WHEN 절이 실행되고, 컨트롤러는 나머지 대안들을 건너뜁니다.

통사론

CASE
WHEN <expression1> THEN action_block1;
WHEN <expression2> THEN action_block2;
WHEN <expression3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • 위 구문에서 각 WHEN 절은 별도의 값을 가집니다. 그리고 .
  • 표현식이 TRUE를 반환하는 WHEN 절이 실행됩니다.
  • 'ELSE' 블록은 선택 사항이며 다음 내용을 포함합니다. 위의 대안 중 어느 것도 충족되지 않을 때 실행합니다.
  • 'END'는 CASE 문단의 끝을 나타내며 CASE 문단에서 필수적인 부분입니다.

예제 1: 검색된 CASE를 사용한 산술 계산

이 예시에서는 두 숫자 55와 5 사이의 산술 계산을 수행합니다.

DECLARE
a NUMBER := 55;
b NUMBER := 5;
arth_operation VARCHAR2(20) := 'DIVIDE';
BEGIN
dbms_output.put_line('Program started.');
CASE
WHEN arth_operation = 'ADD'
THEN dbms_output.put_line('Addition of the numbers are: '||a+b );
WHEN arth_operation = 'SUBTRACT'
THEN dbms_output.put_line('Subtraction of the numbers are: '|| a-b);
WHEN arth_operation = 'MULTIPLY'
THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b );
WHEN arth_operation = 'DIVIDE'
THEN dbms_output.put_line('Division of the numbers are: '|| a/b );
ELSE dbms_output.put_line('No operation action defined. Invalid operation');
END CASE;
dbms_output.put_line('Program completed.');
END;
/

Code 설명

  • Code 2행: 변수 'a'를 'NUMBER'로 선언하고 '55'라는 값으로 초기화합니다.
  • Code 3행: 변수 'b'를 'NUMBER'로 선언하고 '5'라는 값으로 초기화합니다.
  • Code 4행: 'arth_operation' 변수를 크기 20의 'VARCHAR2'로 선언하고 'DIVIDE' 값으로 초기화합니다.
  • Code 6번째 줄: "프로그램이 시작되었습니다"라는 메시지를 출력합니다.
  • Code 7번째 줄: 검색된 CASE 문이 시작됩니다. ADD, SUB 절TRACT와 MULTIPLY는 'arth_operation' 값과 조건이 일치하지 않으므로 건너뜁니다.
  • Code 14행: WHEN 절 표현식 "arth_operation = 'DIVIDE'"가 충족되어 TRUE를 반환합니다.
  • Code 15번째 줄: WHEN 절의 액션 블록이 실행되고 '숫자 나누기는 11입니다'가 출력됩니다.
  • Code 17번째 줄: CASE 문의 끝을 나타냅니다.
  • Code 18번째 줄: "프로그램이 완료되었습니다"라는 메시지를 출력합니다.

Code 산출

Program started.
Division of the numbers are: 11
Program completed.

사건과 검색된 사건 비교

두 방식 모두 하나의 분기를 선택하지만, 분기를 선택하는 방식에 차이가 있으며, 그 내용은 아래에 요약되어 있습니다.

타입 기술설명 용법
CASE 받는 유사 IF-THEN-ELSIF 문장입니다. '선택자'는 부울 표현식 대신 대안을 선택하는 데 사용됩니다. 선택기를 사용하여 여러 대안 중에서 하나를 선택하는 데 사용됩니다.
검색된 사례 실제 선택자가 없는 CASE 문입니다. 대신, 대안을 선택하는 조건(TRUE 또는 FALSE로 평가됨)이 포함되어 있습니다. 주로 범위 조건 하에서 두 개 이상의 대안 중에서 선택하는 데 사용되었습니다.

자주 묻는 질문

단순 CASE 문은 하나의 선택자 값을 각 WHEN 값과 비교합니다. 검색 CASE 문은 선택자가 없으며 각 WHEN 값 내의 전체 조건을 평가하므로 범위 및 복합 테스트를 처리할 수 있습니다.

예. CASE 표현식은 SELECT, WHERE 또는 ORDER BY 절에 나타날 수 있으며, 이는 PL/SQL 블록 내에서만 작동하는 IF-THEN-ELSIF 구문에 비해 중요한 장점입니다.

CASE 문은 일치하는 분기가 없고 ELSE 문도 없는 경우 CASE_NOT_FOUND 예외를 발생시킵니다. ELSE 문(빈 NULL 액션이라도)을 추가하면 이 런타임 오류를 방지할 수 있습니다.

네. 분기문에서 하나의 표현식을 고정된 값과 비교할 때, AI는 해당 체인을 더 깔끔한 CASE 문으로 다시 작성할 수 있습니다. ELSE가 없는 CASE 문은 ELSIF가 없는 경우와 다르게 동작하므로 결과를 확인해 보시기 바랍니다.

CASE 문은 분기별로 액션 블록을 실행하고 END CASE로 끝납니다. CASE 표현식은 단일 값을 반환하고 END로 끝나므로 변수에 할당하거나 SQL에서 사용할 수 있습니다.

이 게시물을 요약하면 다음과 같습니다.