CASE 문 Oracle 예제가 포함된 PL/SQL
CASE문이란 무엇입니까?
CASE 문은 사용 가능한 옵션의 조건에 따라 하나의 대안을 선택하는 IF-THEN-ELSIF 문과 유사합니다.
- CASE 문은 부울 표현식 대신 "선택기"를 사용하여 시퀀스를 선택합니다.
- CASE 문의 표현식 값은 선택자로 처리됩니다.
- 표현식은 모든 유형(산술, 변수 등)일 수 있습니다.
- 각 대안에는 미리 정의된 특정 값(선택자)이 할당되며, 조건식 값과 일치하는 선택기 값을 가진 대안이 실행됩니다.
- IF-THEN-ELSIF와 달리 CASE 문은 SQL 문에서도 사용할 수 있습니다.
- CASE 문의 ELSE 블록에는 대안이 하나도 선택되지 않았을 때 실행되어야 하는 시퀀스가 포함되어 있습니다.
통사론
CASE (expression) WHEN <valuel> THEN action_blockl; 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; /
코드 설명
- 코드 라인 2: 변수 'a'를 'NUMBER' 데이터 유형으로 선언하고 값 '55'으로 초기화합니다.
- 코드 라인 3: 변수 'b'를 'NUMBER' 데이터 유형으로 선언하고 값 '5'로 초기화합니다.
- 코드 줄 4: 변수 'arth_operation'을 크기가 2인 'VARCHAR20' 데이터 유형으로 선언하고 값 'MULTIPLY'로 초기화합니다.
- 코드 라인 6: "프로그램이 시작되었습니다"라는 문구를 인쇄합니다.
- 코드 라인 7: CASE는 표현식의 값을 확인합니다. 이 경우, 변수 'arth_operation'의 값은 'MULTIPLY'입니다. 이 값은 이제 이 CASE 명령문에 대한 선택자로 처리됩니다.
- 코드 줄 10: 'MULTIPLY' 값을 갖는 WHEN 절이 선택자 값과 일치하므로 컨트롤러는 이 action_block을 선택하고 '숫자의 곱은 275입니다'라는 메시지를 인쇄합니다.
- 코드 line13: CASE 문의 끝을 표시합니다.
- 코드 라인 14: "프로그램 완료"라는 문구를 인쇄합니다.
코드 출력
Program started. Multiplication of the numbers are: 275 Program completed.
검색된 사례 명세서
SEARCHED CASE 문은 CASE 문과 유사하지만 선택기를 사용하여 대안을 선택하는 대신 SEARCHED CASE는 WHEN 절에 정의된 표현식을 직접 갖습니다.
- 조건을 만족하는 첫 번째 WHEN 절이 실행되고 컨트롤러는 나머지 대안을 건너뜁니다.
통사론
CASE WHEN <expression1> THEN action_blockl; 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; /
코드 설명
- 코드 라인 2: 변수 'a'를 'NUMBER' 데이터 유형으로 선언하고 값 '55'으로 초기화합니다.
- 코드 라인 3: 변수 'b'를 'NUMBER' 데이터 유형으로 선언하고 값 '5'로 초기화합니다.
- 코드 줄 4: 변수 'arth_operation'을 크기 2의 'VARCHAR20' 데이터 유형으로 선언하고 값 'DIVIDE'로 초기화합니다.
- 코드 라인 6: "프로그램이 시작되었습니다"라는 문구를 인쇄합니다.
- 코드 라인 7: SEARCHED CASE 문이 시작됩니다. 라인 8에서 라인 13까지의 코드는 선택자 값(ADD, SUBTRACT, MULTIPLY)이 'arth_operation' 값과 일치하지 않으므로 건너뜁니다.
- 코드 줄 14: WHEN 절 표현식 "arth_operation = 'DIVIDE'"가 충족되고 표현식은 TRUE를 반환합니다.
- 코드 줄 15: WHEN 절의 Action_block이 실행되고 '숫자 나누기는 11입니다'라는 메시지가 출력됩니다.
- 코드 라인 17: CASE 문의 끝을 표시합니다.
- 코드 라인 18: "프로그램 완료"라는 문구를 인쇄합니다.
코드 출력
Program started. Division of the numbers are: 11 Program completed.
요약
TYPE | 기술 | 사용법 |
---|---|---|
CASE | 유사하게 IF-THEN-ELSIF 성명. 부울 표현식 대신 'SELECTOR'를 사용하여 대안을 선택합니다. | 'SELECTOR'를 사용하여 여러 대안 중에서 선택하는 데 사용됩니다. |
검색된 사례 | 실제 'SELECTOR'가 없는 CASE 문입니다. 대신 대안을 선택하는 실제 조건(TRUE/FALSE로 평가됨)이 포함됩니다. | 주로 두 개 이상의 대안 중에서 선택하는 데 사용됩니다. |