Oracle PL/SQL IF THEN ELSE Declarație: ELSIF, NESTED-IF

Ce sunt declarațiile de luare a deciziilor?

Declarațiile de luare a deciziilor sunt cele care vor decide controlul fluxului SQL declarații bazate pe condiții. Acesta oferă programatorului un control mai bun al împiedicării executării unui anumit cod (diagrama 1) sau alegerea unui cod dorit în funcție de condiție (diagrama 2). Mai jos este reprezentarea picturală a „Declarației de luare a deciziilor”.

Diagrama declarației de luare a deciziilor
Diagrama declarației de luare a deciziilor

Tipuri de declarații de luare a deciziilor:

Oracle furnizează următoarele tipuri de declarații de luare a deciziilor.

  • DACA ATUNCI
  • DACĂ-Atunci-ALTĂ
  • DACĂ-Atunci-ELSIF
  • NESTED-IF
  • CASE
  • CAZ CĂUTAT

IF-THEN Declarația

Instrucțiunea IF-THEN este folosită în principal pentru a executa o anumită secțiune de coduri numai atunci când condiția este îndeplinită.

Condiția ar trebui să cedeze boolean (Adevărat/Fals). Este o instrucțiune condițională de bază care va permite ORACLE să execute/sări o anumită bucată de cod pe baza condițiilor predefinite.

Sintaxă pentru instrucțiunile IF THEN:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • În sintaxa de mai sus, cuvântul cheie „IF” va fi urmat de o condiție care se evaluează ca „TRUE”/“FALSE”.
  • Controlul va executa numai dacă starea revine .
  • În cazul stării evaluează la apoi, SQL va omite , și va începe să execute codul de lângă blocul „END IF”.

Notă: Ori de câte ori condiția este evaluată la „NULL”, atunci SQL va trata „NULL” ca fiind „FALSE”.

Exemplu 1: În acest exemplu, vom tipări un mesaj când numărul este mai mare de 100. Pentru aceasta, vom executa următorul cod

Pentru a imprima un mesaj când un număr are valoare mai mare de 100, executăm următorul cod.

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;
/

Explicația codului:

  • Linia de cod 2: Declararea variabilei „a” ca tip de date „NUMĂR” și inițializarea acesteia cu valoarea „10”.
  • Linia de cod 4: Se imprimă declarația „Programul început”.
  • Linia de cod 5: Verificarea condiției, dacă variabila „a” este mai mare decât „100”.
  • Linia de cod 6: Dacă „a” este mai mare de „100”, atunci „a este mai mare de 100” va fi tipărită. Dacă „a” este mai mic sau egal cu 100, atunci condiția eșuează, astfel încât declarația de imprimare de mai sus este ignorată.
  • Linia de cod 8: Tipărirea mențiunii „Program finalizat”.

Ieșire cod:

Program started.
Program completed.

Exemplu 2: În acest exemplu, vom tipări un mesaj dacă un anumit alfabet este prezent în vocalele engleze (A, E, I, O, U).

Pentru a imprima un mesaj când caracterul dat este Vowel, executăm următorul cod.

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;
/

Explicația codului:

  • Linia de cod 2: Declararea variabilei „a” ca „CHAR” cu dimensiunea „1” tip de date și inițializarea acesteia cu valoarea „u”.
  • Linia de cod 4: Verificarea condiției, dacă variabila „a” este prezentă în listă („A”, „E”, „I”, „O”, „U”).
  • Valoarea lui „a” a fost convertită în majuscule înainte de comparare, pentru ca comparația să nu țină seama de majuscule.
  • Linia de cod 5: Dacă „a” este prezent în listă, atunci va fi tipărită mențiunea „Personajul este în vocale engleze”. Dacă condiția a eșuat, atunci acest program nu va da nicio ieșire, deoarece în afara blocului IF-THEN nu am emis nicio declarație de printare.

Ieșire cod:

The character is in English Vowels

Declarația IF-THEN-ELSE

  • Instrucțiunea IF-THEN-ELSE este folosită în principal pentru a selecta între două alternative în funcție de condiție.
  • Mai jos este reprezentarea sintaxă a instrucțiunii IF-THEN-ELSE.

Sintaxa pentru instrucțiunile 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;
  • În sintaxa de mai sus, cuvântul cheie „IF” va fi urmat de o condiție care se evaluează ca „TRUE”/“FALSE”.
  • Controlul va executa numai dacă starea revine .
  • În cazul stării evaluează la apoi se va executa SQL .
  • În orice caz, unul dintre cele două blocuri de acțiune va fi executat.

Notă: Ori de câte ori condiția este evaluată la „NULL”, atunci SQL va trata „NULL” ca fiind „FALSE”.

Exemplu 1: În acest exemplu, vom tipări un mesaj dacă numărul dat este par sau impar.

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;
/

Explicația codului:

  • Linia de cod 2: Declararea variabilei „a” ca tip de date „NUMĂR” și inițializarea acesteia cu valoarea „11”.
  • Linia de cod 4: Se imprimă declarația „Programul început”.
  • Linia de cod 5: Verificarea condiției, dacă modulul variabilei „a” cu „2” este 0.
  • Linia de cod 6: Dacă „0”, atunci „a este un număr par” va fi tipărit.
  • Linia de cod 7: Dacă valoarea modulului nu este egală cu „0”, atunci condiția revine , astfel încât mesajul „a este un număr impar” va fi tipărit.
  • Linia de cod 10: Imprimarea declarației „Program finalizat”

Ieșire cod:

Program started.
a is odd number
Program completed.

Instrucțiunea IF-THEN-ELSIF

  • Instrucțiunea IF-THEN-ELSIF este utilizată în principal atunci când o alternativă ar trebui să fie aleasă dintr-un set de alternative, unde fiecare alternativă are propriile condiții care trebuie îndeplinite.
  • Primele condiții care revin vor fi executate, iar condițiile rămase vor fi sărite.
  • Instrucțiunea IF-THEN-ELSIF poate conține blocul „ELSE”. Acest bloc „ELSE” va fi executat dacă niciuna dintre condiții nu este îndeplinită.

notițe: blocul ELSE este opțional în această instrucțiune condiționată. Dacă nu există niciun bloc ELSE și nicio condiție nu este îndeplinită, atunci controlerul va sări peste tot blocul de acțiune și va începe să execute partea rămasă a codului.

Sintaxa pentru instrucțiunile 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;
  • În sintaxa de mai sus, controlul va executa numai dacă se întoarce condiția1 .
  • Dacă condiția 1 nu este îndeplinită, atunci controlerul va verifica condiția 2.
  • Controlorul va ieși din instrucțiunea IF în următoarele două cazuri.
    • Când controlorul a găsit vreo condiție care revine . În acest caz, action_block-ul corespunzător va fi executat și controlerul va părăsi acest bloc de instrucțiuni IF și va începe să execute codul rămas.
    • Când niciuna dintre condiții nu este îndeplinită, controlerul atunci va executa blocul ELSE dacă este prezent, apoi va ieși din instrucțiunea IF.

Notă: Ori de câte ori condiția este evaluată la „NULL”, atunci SQL va trata „NULL” ca fiind „FALSE”.

Exemplu 1: Fără bloc ELSE

În acest exemplu, vom tipări nota pe baza notelor date fără altă condiție (nota >= 70 Nota A, nota >=40 și nota <70 Nota B, nota >=35 și nota <40 Nota 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;
/

Explicația codului:

  • Linia de cod 2: Declararea variabilei „marca” ca tip de date „NUMĂR” și inițializarea acesteia cu valoarea „55”.
  • Linia de cod 4: Se imprimă declarația „Programul început”.
  • Linia de cod 5: Verificarea condiției1, dacă „marca” este mai mare sau egală cu 70.
  • Linia de cod 7: Deoarece condiția1 a eșuat, atunci condiția2 '70>mark>=40′ este verificată.
  • Linia de cod 8: Condiția2 revine , prin urmare mesajul „Grad B” va fi tipărit.
  • Linia de cod 12: Se imprimă declarația „Program finalizat”.
  • În acest caz, condiția 3 „marcajul < 35” va fi omisă, deoarece controlerul a găsit o condiție care revine înainte de condiția3.

Ieșire cod:

Program started.
Grade B
Program completed.

Exemplu 2: Cu bloc ELSE

În acest exemplu, vom tipări nota pe baza notelor date cu condiția alt (notă >= 70 nota A, nota >=40 și nota <70 nota B, nota >=35 și nota <40 nota C, altfel „Fără notă”).

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;
/

Explicația codului:

  • Linia de cod 2: Declararea variabilei „marca” ca tip de date „NUMĂR” și inițializarea acesteia cu valoarea „25”.
  • Linia de cod 4: Se imprimă declarația „Programul început”.
  • Linia de cod 5: Verificarea condiției 1, dacă „marca” este mai mare sau egală cu 70.
  • Linia de cod 7: Deoarece condiția1 a eșuat, atunci condiția2 '70>mark>=40′ este verificată.
  • Linia de cod 8: Deoarece condiția2 a eșuat, atunci condiția3 '40>mark>=35′ este verificată.
  • Linia de cod 11: Deoarece toate condițiile au eșuat, controlul va verifica acum prezența blocului ELSE și va tipări mesajul „Fără nota” din blocul ELSE.
  • Linia de cod 14: Se imprimă declarația „Program finalizat”.

Ieșire cod:

Program started.
No Grade 
Program completed.

Declarație NESTED-IF

  • Declarația NESTED-IF este în principiu permisă programatorilor să plaseze una sau mai multe condiții „IF” în interiorul altei condiții „IF” altele decât afirmațiile normale.
  • Fiecare condiție „IF” ar trebui să aibă o declarație separată „END IF” care marchează sfârșitul domeniului respectiv .
  • Declarația „IF” va considera cea mai apropiată instrucțiune „END IF” ca punct final pentru acea condiție particulară.
  • Reprezentarea picturală pentru NESTED-IF este prezentată mai jos în diagramă.

Declarație NESTED-IF

Declarație 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

Explicația sintaxei:

  • În sintaxa de mai sus, IF exterior conține încă o instrucțiune IF în blocul său de acțiuni.
  • Condiția1 revine , atunci controlul se va executa și verifică starea1.
  • Dacă se întoarce și condiția2 , apoi vor fi de asemenea executate.
  • În cazul condiției2 evaluează la apoi, SQL va omite .

Aici vom vedea un exemplu de Imbricat If –

Exemplu de declarație Imbricată- If: Cel mai mare dintre trei număr

În acest exemplu, vom tipări cel mai mare dintre trei numere utilizând instrucțiunea Imbricată-Dacă. Numerele vor fi atribuite în partea de declarare, după cum puteți vedea în codul de mai jos, adică Number= 10,15 și 20 și numărul maxim va fi preluat folosind instrucțiuni imbricate-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;
/

Explicația codului:

  • Linia de cod 2: Declararea variabilei „a” ca tip de date „NUMĂR” și inițializarea acesteia cu valoarea „10”.
  • Linia de cod 3: Declararea variabilei „b” ca tip de date „NUMĂR” și inițializarea acesteia cu valoarea „15”.
  • Linia de cod 4: Declararea variabilei „c” ca tip de date „NUMĂR” și inițializarea acesteia cu valoarea „20”.
  • Linia de cod 6: Tipărirea mențiunii „Program început” (linia 6).
  • Linia de cod 7: Verificarea condiției1, dacă „a” este mai mare decât „b” (linia 7).
  • Linia de cod 10: Dacă „a” este mai mare decât „b, atunci condiția din „imbricat-dacă 1” va verifica dacă „a” este mai mare decât „c” (linia 10).
  • Linia de cod 13: Dacă totuși „a” este mai mare, atunci mesajul „A este cel mai mare” va fi tipărit (linia 11). În caz contrar, dacă condiția 2 eșuează, atunci „C este cel mai mare” va fi tipărit (linia 13).
  • Linia de cod 18: În cazul în care condiția1 returnează false, atunci condiția din „imbricat-dacă 2” va verifica dacă „b” este mai mare decât „c” (linia 18).
  • Linia de cod 21: Dacă „b” este mai mare decât „c”, atunci mesajul „B este cel mai mare” va fi tipărit (linia 19), altfel dacă condiția 2 eșuează, atunci „C este cel mai mare” va fi tipărit (linia 21).
  • Linia de cod 24: Tipărirea mențiunii „Program finalizat” (linia 24).

Ieșirea codului:

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

Rezumat

În acest capitol, am învățat diferitele declarații de luare a deciziilor și sintaxa și exemplele acestora. Tabelul de mai jos oferă rezumatul diferitelor declarații condiționale pe care le-am discutat.

TIP DESCRIERE UTILIZARE
DACA ATUNCI Verifică o condiție booleană, dacă codul TRUE din blocul „THEN” va fi executat. Pentru a sări/executa un anumit cod în funcție de condiție.
DACĂ-Atunci-ALTĂ Verifică pentru o condiție booleană, dacă codul TRUE din blocul „THEN” va fi executat, dacă este executat cod fals din blocul „ELSE”. Cel mai potrivit în condiția „ACESTA-SAU-ACA”.
DACĂ-Atunci-ELSIF Verifică o condiție booleană în ordine secvențială. Primul bloc din secvența care returnează condiția TRUE va fi executat. Dacă niciuna dintre condițiile din secvență nu este TRUE, atunci codul din blocul „ELSE” este executat. Obișnuit să alegi dintre mai mult de două alternative, în principal.
NESTED-IF Permite una sau mai multe instrucțiuni IF-THEN sau IF-THEN-ELSIF în interiorul altei instrucțiuni IF-THEN sau IF-THEN-ELSIF. Folosit în principal în situații de stare imbricată.