Oracle PL/SQL IF THEN ELSE 문: ELSIF, NESTED-IF

의사결정 진술이란 무엇입니까?

의사 결정 진술은 흐름 제어를 결정하는 진술입니다. SQL 조건에 따른 진술. 이를 통해 프로그래머는 특정 코드가 실행되는 것을 방지하거나(그림 1) 조건에 따라 원하는 코드를 선택(그림 2)할 수 있습니다. 아래는 “의사결정문”을 그림으로 표현한 것입니다.

의사결정 진술서 다이어그램
의사결정 진술서 다이어그램

의사결정 진술의 유형:

Oracle 다음과 같은 유형의 의사결정 진술을 제공합니다.

  • IF-THEN
  • IF-THEN-ELSE
  • IF-THEN-ELSIF
  • 중첩된 경우
  • CASE
  • 검색된 사례

IF-THEN 문

IF-THEN 문은 주로 조건이 만족되는 경우에만 코드의 특정 부분을 실행하는 데 사용됩니다.

조건이 충족되어야 합니다. 부울 (참/거짓). 이는 ORACLE이 사전 정의된 조건에 따라 특정 코드를 실행/건너뛸 수 있도록 하는 기본 조건문입니다.

IF THEN 문의 구문:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • 위 구문에서 'IF' 키워드 뒤에는 'TRUE'/'FALSE'로 평가되는 조건이 옵니다.
  • 컨트롤은 다음을 실행합니다. 조건이 반환되는 경우에만 .
  • 조건이 다음과 같이 평가되는 경우 그런 다음 SQL은 , 'END IF' 블록 옆의 코드 실행이 시작됩니다.

참고 : 조건이 'NULL'로 평가될 때마다 SQL은 'NULL'을 'FALSE'로 처리합니다.

예제 1: 이 예제에서 우리는 숫자가 100보다 클 때 메시지를 출력할 것입니다. 이를 위해 우리는 다음 코드를 실행할 것입니다.

숫자가 100보다 큰 값을 가질 때 메시지를 출력하려면 다음 코드를 실행합니다.

DECLARE 
a NUMBER :=10;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > 100 ) THEN
dbms_output.put_line('a is greater than 100'); 
END IF;
dbms_output.put_line(‘Program completed.');
END;
/

코드 설명 :

  • 코드 라인 2: 변수 'a'를 'NUMBER' 데이터 유형으로 선언하고 값 '10'으로 초기화합니다.
  • 코드 라인 4: "프로그램이 시작되었습니다"라는 문구를 인쇄합니다.
  • 코드 라인 5: 변수 'a'가 '100'보다 큰지 조건을 확인합니다.
  • 코드 라인 6: 'a'가 '100'보다 크면 "a는 100보다 큽니다"가 인쇄됩니다. 'a'가 100보다 작거나 같으면 조건이 실패하므로 위의 인쇄 문은 무시됩니다.
  • 코드 라인 8: "프로그램 완료"라는 문구를 인쇄합니다.

코드 출력:

Program started.
Program completed.

예 2 : 이 예에서는 영어 모음(A, E, I, O, U)에 해당 알파벳이 있으면 메시지를 인쇄해 보겠습니다.

주어진 문자가 모음일 때 메시지를 출력하려면 다음 코드를 실행합니다.

DECLARE 
a CHAR(1) :=’u’;
BEGIN
IF UPPER(a) in ('A’,'E','I','0','U' ) THEN 
dbms_output.put_line(‘The character is in English Vowels');
END IF;
END;
/

코드 설명 :

  • 코드 라인 2: 변수 'a'를 크기 '1' 데이터 유형의 'CHAR'로 선언하고 값 'u'로 초기화합니다.
  • 코드 라인 4: 변수 'a'가 목록('A','E','I','O','U')에 존재하는지 조건을 확인합니다.
  • 비교가 대소문자를 구분하지 않도록 비교하기 전에 'a' 값을 대문자로 변환했습니다.
  • 코드 라인 5: 목록에 'a'가 있으면 "The Character is in English Vowels"라는 문구가 인쇄됩니다. 조건이 실패하면 IF-THEN 블록 외부에서는 인쇄 명령문을 발행하지 않았으므로 이 프로그램은 출력을 제공하지 않습니다.

코드 출력:

The character is in English Vowels

IF-THEN-ELSE 문

  • IF-THEN-ELSE 문은 조건에 따라 두 가지 대안 중에서 선택하는 데 주로 사용됩니다.
  • 다음은 IF-THEN-ELSE 문의 구문 표현입니다.

IF-THEN-ELSE 문의 구문:

IF <condition: returns Boolean>
THEN
	-executed only if the condition returns TRUE
	<action_blockl>
ELSE
	-execute if the condition failed (returns FALSE)
	<action_block2>
END if;
  • 위 구문에서 'IF' 키워드 뒤에는 'TRUE'/'FALSE'로 평가되는 조건이 옵니다.
  • 컨트롤은 다음을 실행합니다. 조건이 반환되는 경우에만 .
  • 조건이 다음과 같이 평가되는 경우 그런 다음 SQL이 실행됩니다. .
  • 어떤 경우든 두 개의 작업 블록 중 하나가 실행됩니다.

참고 : 조건이 'NULL'로 평가될 때마다 SQL은 'NULL'을 'FALSE'로 처리합니다.

예제 1: 이 예에서는 주어진 숫자가 홀수인지 짝수인지 메시지를 인쇄하려고 합니다.

DECLARE 
a NUMBER:=11;
BEGIN
dbms_output.put_line (‘Program started');
IF( mod(a,2)=0) THEN 
dbms_output.put_line('a is even number' ); 
ELSE
dbms_output.put_line('a is odd number1); 
END IF;
dbms_output.put_line (‘Program completed.’);
END;
/

코드 설명 :

  • 코드 라인 2: 변수 'a'를 'NUMBER' 데이터 유형으로 선언하고 값 '11'으로 초기화합니다.
  • 코드 라인 4: "프로그램이 시작되었습니다"라는 문구를 인쇄합니다.
  • 코드 라인 5: 변수 'a' x '2'의 계수가 0인지 조건을 확인합니다.
  • 코드 라인 6: '0'이면 "a는 짝수입니다"가 인쇄됩니다.
  • 코드 라인 7: 모듈러스 값이 '0'이 아닌 경우 조건은 다음을 반환합니다. , 따라서 "a는 홀수입니다"라는 메시지가 인쇄됩니다.
  • 코드 라인 10: "프로그램 완료"라는 문구 인쇄

코드 출력:

Program started.
a is odd number
Program completed.

IF-THEN-ELSIF 문

  • IF-THEN-ELSIF 문은 일련의 대안 중에서 하나의 대안을 선택해야 하는 경우에 주로 사용됩니다. 여기서 각 대안에는 충족되어야 하는 고유한 조건이 있습니다.
  • 반환되는 첫 번째 조건 실행되고 나머지 조건은 건너뜁니다.
  • IF-THEN-ELSIF 문에는 'ELSE' 블록이 포함될 수 있습니다. 조건 중 어느 것도 만족되지 않으면 이 'ELSE' 블록이 실행됩니다.

주의 사항: ELSE 블록은 이 조건문에서 선택 사항입니다. ELSE 블록이 없고 조건 중 어느 것도 충족되지 않으면 컨트롤러는 모든 작업 블록을 건너뛰고 코드의 나머지 부분 실행을 시작합니다.

IF-THEN-ELSIF 문의 구문:

IF <conditionl: returns Boolean>
THEN
-executed only if the condition returns TRUE <
action_blockl>
ELSIF <condition2 returns Boolean> <
action_block2>
ELSIF <condition3:returns Boolean> <
action_block3>
ELSE —optional 
<action_block_else>
END if;
  • 위 구문에서 컨트롤은 다음을 실행합니다. 조건 1이 반환되는 경우에만 .
  • 조건1이 만족되지 않으면 컨트롤러는 조건2를 확인합니다.
  • 다음 두 가지 경우에 컨트롤러는 IF 문을 종료합니다.
    • 컨트롤러가 반환되는 조건을 발견한 경우 . 이 경우 해당 action_block이 실행되고 컨트롤러는 이 IF 문 블록을 종료하고 나머지 코드 실행을 시작합니다.
    • 어떤 조건도 충족되지 않으면 then 컨트롤러는 ELSE 블록(있는 경우)을 실행한 다음 IF 문을 종료합니다.

참고 : 조건이 'NULL'로 평가될 때마다 SQL은 'NULL'을 'FALSE'로 처리합니다.

예 1 : ELSE 블록 없이

이 예에서는 else 조건(mark >= 70 Grade A, mark >=40 및 mark<70 Grade B, mark >=35 및 mark<40 Grade C) 없이 주어진 점수를 기준으로 성적을 인쇄합니다.

DECLARE
mark NUMBER :=55;
BEGIN
dbms_output.put_line(‘Program started.’ );
IF( mark >= 70) THEN 
dbms_output.put_line(‘Grade A’);
ELSIF(mark >= 40 AND mark < 70) THEN
dbms_output.put_line(‘Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN
dbms_output.put_line(‘Grade C’);
END IF;
dbms_output.put_line(‘Program completed.’); 
END;
/

코드 설명 :

  • 코드 라인 2: 'mark' 변수를 'NUMBER' 데이터 유형으로 선언하고 값 '55'로 초기화합니다.
  • 코드 라인 4: "프로그램이 시작되었습니다"라는 문구를 인쇄합니다.
  • 코드 라인 5: 'mark'가 1보다 크거나 같은지 조건 70을 확인합니다.
  • 코드 라인 7: 조건1이 실패했으므로 조건2 '70>mark>=40′이 확인됩니다.
  • 코드 라인 8: 조건2가 반환됩니다. , 따라서 'Grade B' 메시지가 인쇄됩니다.
  • 코드 라인 12: "프로그램 완료"라는 문구를 인쇄합니다.
  • 이 경우 컨트롤러가 반환하는 조건 하나를 찾았으므로 조건 3 'mark < 35'는 건너뜁니다. 조건3 이전.

코드 출력:

Program started.
Grade B
Program completed.

예제 2: ELSE 블록 포함

이 예에서는 else 조건(mark >= 70 Grade A, mark >=40 및 mark<70 Grade B, mark >=35 및 mark<40 Grade C, else)을 사용하여 주어진 점수를 기반으로 성적을 인쇄합니다. '등급 없음').

DECLARE
mark NUMBER :=25;
BEGIN
dbms_output.put_line(‘Program started.’ );
IF( mark >= 70) THEN 
dbms_output.put_line(‘Grade A’); 
ELSIF(mark >= 40 AND mark < 70) THEN 
dbms_output.put_line(‘Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN 
dbms_output.put_line(‘Grade C);
ELSE
dbms_output.put_line(‘No Grade’);
END IF;
dbms_output.put_line(‘Program completed.' ); 
END;
/

코드 설명 :

  • 코드 라인 2: 'mark' 변수를 'NUMBER' 데이터 유형으로 선언하고 값 '25'로 초기화합니다.
  • 코드 라인 4: "프로그램이 시작되었습니다"라는 문구를 인쇄합니다.
  • 코드 라인 5: 'mark'가 1보다 크거나 같은지 조건 70을 확인합니다.
  • 코드 라인 7: 조건1이 실패했으므로 조건2 '70>mark>=40′이 확인됩니다.
  • 코드 라인 8: 조건2이 실패했으므로 조건3 '40>mark>=35′이 확인됩니다.
  • 코드 라인 11: 모든 조건이 실패했으므로 제어 장치는 이제 ELSE 블록이 있는지 확인하고 ELSE 블록에서 '등급 없음' 메시지를 인쇄합니다.
  • 코드 라인 14: "프로그램 완료"라는 문구를 인쇄합니다.

코드 출력:

Program started.
No Grade 
Program completed.

NESTED-IF 문

  • NESTED-IF 문은 기본적으로 프로그래머가 하나 이상의 'IF' 조건을 다른 'IF' 조건 안에 배치할 수 있도록 허용합니다. 일반적인 진술 이외의 것.
  • 각 'IF' 조건에는 해당 특정 조건의 범위 끝을 표시하는 별도의 'END IF' 문이 있어야 합니다. .
  • 'IF' 문은 가장 가까운 'END IF' 문을 해당 조건의 종료점으로 간주합니다.
  • NESTED-IF에 대한 그림 표현은 아래 다이어그램에 나와 있습니다.

NESTED-IF 문

NESTED-IF 문

IF <conditionl: returns Boolean>
THEN
	—executed only if the condition returns TRUE
	<action block1 starts>
	IF <condition2: returns Boolean>
	THEN
	<action_block2>
	END IF; —END IF corresponds to condition2
<action_blockl ends>
END IF; —END IF corresponds to condition1

구문 설명:

  • 위 구문에서 외부 IF의 작업 블록에는 IF 문이 하나 더 포함되어 있습니다.
  • 조건 1이 반환됩니다. , 그러면 제어가 실행됩니다 조건 1를 확인합니다.
  • 조건2도 반환하는 경우 , 그 다음에 도 처형될 것이다.
  • 조건 2의 경우 다음과 같이 평가됩니다. 그런 다음 SQL은 .

여기서는 Nested If의 예를 살펴보겠습니다.

중첩된 If 문의 예: 세 숫자 중 가장 큰 숫자

이 예제에서, 우리는 Nested-If 문을 사용하여 세 개의 숫자 중 가장 큰 숫자를 출력할 것입니다. 숫자는 아래 코드에서 볼 수 있듯이, 선언 부분에서 할당됩니다. 즉, Number= 10,15, 20, XNUMX이고, 최대 숫자는 nested-if 문을 사용하여 페치됩니다.

DECLARE 
a NUMBER :=10; 
b NUMBER :=15; 
c NUMBER :=20;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > b)THEN
/*Nested-if l */
	dbms_output.put_line(’Checking Nested-IF 1'); 
	IF( a > c ) THEN
	dbms_output.put_line(‘A is greatest’); 
	ELSE
	dbms_output.put_line(‘C is greatest’); 
	END IF;
ELSE
/*Nested-if2 */
	dbms_output.put_line('Checking Nested-IF 2' ); 
	IF( b > c ) THEN
	dbms_output.put_line(’B is greatest' ); 
	ELSE
	dbms_output.put_line(’C is greatest' ); 
	END IF;
END IF;
dbms_output.put_line(‘Program completed.’ );
END;
/

코드 설명 :

  • 코드 라인 2: 변수 'a'를 'NUMBER' 데이터 유형으로 선언하고 값 '10'으로 초기화합니다.
  • 코드 라인 3: 변수 'b'를 'NUMBER' 데이터 유형으로 선언하고 값 '15'로 초기화합니다.
  • 코드 라인 4: 변수 'c'를 'NUMBER' 데이터 유형으로 선언하고 값 '20'으로 초기화합니다.
  • 코드 라인 6: "프로그램이 시작되었습니다"라는 문구를 인쇄합니다(6번째 라인).
  • 코드 라인 7: 'a'가 'b'보다 큰지 조건1을 확인합니다(라인 7).
  • 코드 라인 10: 'a'가 'b'보다 크면 'nested-if 1'의 조건은 'a'가 'c'보다 큰지 확인합니다(라인 10).
  • 코드 라인 13: 여전히 'a'가 더 크면 'A is maximum' 메시지가 인쇄됩니다(라인 11). 그렇지 않고 조건 2가 실패하면 'C is maximum'이 인쇄됩니다(라인 13).
  • 코드 라인 18: 조건1이 false를 반환하는 경우 'nested-if 2'의 조건은 'b'가 'c'보다 큰지 확인합니다(라인 18).
  • 코드 라인 21: 'b'가 'c'보다 크면 'B is maximum' 메시지가 인쇄되고(라인 19), 조건 2가 실패하면 'C is maximum'이 인쇄됩니다(라인 21).
  • 코드 라인 24: "프로그램 완료"라는 문구를 인쇄합니다(라인 24).

코드 출력:

Program started.
Checking Nested-IF 2
C is greatest
Program completed.

요약

이 장에서 우리는 다양한 의사결정문과 그 구문 및 예를 배웠습니다. 아래 표는 우리가 논의한 다양한 조건문을 요약한 것입니다.

TYPE 기술 사용법
IF-THEN 'THEN' 블록의 TRUE 코드가 실행될 경우 부울 조건을 확인합니다. 조건에 따라 특정 코드를 건너뛰거나 실행합니다.
IF-THEN-ELSE 'THEN' 블록의 TRUE 코드가 실행될 경우, 'ELSE' 블록의 거짓 코드가 실행될 경우 불리언 조건을 검사합니다. 'THIS-OR-THAT' 조건에 가장 적합합니다.
IF-THEN-ELSIF 부울 조건을 순차적으로 확인합니다. TRUE 조건을 반환하는 시퀀스의 첫 번째 블록이 실행됩니다. 시퀀스의 조건 중 어느 것도 TRUE가 아닌 경우 'ELSE' 블록의 코드가 실행됩니다. 주로 두 개 이상의 대안 중에서 선택하는 데 사용됩니다.
중첩된 경우 다른 IF-THEN 또는 IF-THEN-ELSIF 문 내에 하나 이상의 IF-THEN 또는 IF-THEN-ELSIF 문을 허용합니다. 주로 중첩된 조건 상황에서 사용됩니다.