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

Code Explicaţie:

  • Code linia 2: Declararea variabilei „a” ca tip de date „NUMBER” și inițializarea acesteia cu valoarea „10”.
  • Code linia 4: Afișarea instrucțiunii „Program pornit”.
  • Code linia 5: Verificarea condiției, dacă variabila „a” este mai mare decât „100”.
  • Code linia 6: Dacă „a” este mai mare decât „100”, atunci se va afișa „a este mai mare decât 100”. Dacă „a” este mai mic sau egal cu 100, atunci condiția eșuează, deci instrucțiunea de afișare de mai sus este ignorată.
  • Code linia 8: Afișarea instrucțiunii „Program finalizat”.

Code ieșire:

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

Code Explicaţie:

  • Code linia 2: Declararea variabilei „a” ca „CHAR” cu dimensiunea „1” tip de date și inițializarea acesteia cu valoarea „u”.
  • Code linia 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.
  • Code linia 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.

Code ieșire:

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

Code Explicaţie:

  • Code linia 2: Declararea variabilei „a” ca tip de date „NUMBER” și inițializarea acesteia cu valoarea „11”.
  • Code linia 4: Afișarea instrucțiunii „Program pornit”.
  • Code linia 5: Verificarea condiției dacă modulul variabilei 'a' prin '2' este 0.
  • Code linia 6: Dacă este „0”, atunci se va afișa „a este număr par”.
  • Code linia 7: Dacă valoarea modulului nu este egală cu „0”, atunci condiția returnează , deci va fi afișat mesajul „a este un număr impar”.
  • Code linia 10: Afișarea instrucțiunii „Program finalizat”

Code ieșire:

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

Code Explicaţie:

  • Code linia 2: Declararea variabilei „mark” ca tip de date „NUMBER” și inițializarea acesteia cu valoarea „55”.
  • Code linia 4: Afișarea instrucțiunii „Program pornit”.
  • Code linia 5: Verificarea condiției 1, dacă „mark” este mai mare sau egal cu 70.
  • Code linia 7: Deoarece condiția 1 a eșuat, atunci se verifică condiția 2 '70>mark>=40′.
  • Code linia 8: Condiția2 returnează , prin urmare, va fi imprimat mesajul „Nota B”.
  • Code linia 12: Afișarea instrucțiunii „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.

Code ieșire:

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

Code Explicaţie:

  • Code linia 2: Declararea variabilei „mark” ca tip de date „NUMBER” și inițializarea acesteia cu valoarea „25”.
  • Code linia 4: Afișarea instrucțiunii „Program pornit”.
  • Code linia 5: Verificarea condiției 1, dacă „mark” este mai mare sau egal cu 70.
  • Code linia 7: Deoarece condiția 1 a eșuat, atunci se verifică condiția 2 '70>mark>=40′.
  • Code linia 8: Deoarece condiția 2 a eșuat, atunci se verifică condiția 3 '40>mark>=35′.
  • Code linia 11: Deoarece toate condițiile au eșuat, sistemul de control va verifica acum prezența blocului ELSE și va afișa mesajul „Fără grad” din blocul ELSE.
  • Code linia 14: Afișarea instrucțiunii „Program finalizat”.

Code ieșire:

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

Code Explicaţie:

  • Code linia 2: Declararea variabilei „a” ca tip de date „NUMBER” și inițializarea acesteia cu valoarea „10”.
  • Code linia 3: Declararea variabilei „b” ca tip de date „NUMBER” și inițializarea acesteia cu valoarea „15”.
  • Code linia 4: Declararea variabilei „c” ca tip de date „NUMBER” și inițializarea acesteia cu valoarea „20”.
  • Code linia 6: Afișarea instrucțiunii „Program pornit” (linia 6).
  • Code linia 7: Verificarea condiției 1, dacă 'a' este mai mare decât 'b' (linia 7).
  • Code linia 10: Dacă „a” este mai mare decât „b”, atunci condiția din „nested-if 1” va verifica dacă „a” este mai mare decât „c” (linia 10).
  • Code linia 13: Dacă tot „a” este mai mare, atunci va fi afișat mesajul „A este cel mai mare” (linia 11). Altfel, dacă condiția 2 eșuează, atunci va fi afișat „C este cel mai mare” (linia 13).
  • Code linia 18: În cazul în care condiția1 returnează fals, atunci condiția din „nested-if 2” va verifica dacă „b” este mai mare decât „c” (linia 18).
  • Code linia 21: Dacă „b” este mai mare decât „c”, atunci va fi afișat mesajul „B este cel mai mare” (linia 19), altfel, dacă condiția 2 eșuează, atunci va fi afișat „C este cel mai mare” (linia 21).
  • Code linia 24: Afișarea instrucț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ă.

Rezumați această postare cu: