Instrucțiune Oracle PL / SQL IF THEN ELSE: ELSIF, NESTED-IF

Cuprins:

Anonim

Ce sunt declarațiile de luare a deciziilor?

Declarațiile de luare a deciziilor sunt cei care vor decide controlul fluxului declarațiilor SQL pe baza condițiilor. Oferă programatorului un control mai bun pentru a preveni executarea unui anumit cod (diagrama 1) sau alegerea unui cod dorit pe baza condiției (diagrama 2). Mai jos este reprezentarea picturală a „Declarației de luare a deciziilor”.

Diagrama declarațiilor de luare a deciziilor

Tipuri de declarații de luare a deciziilor:

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

  • DACA ATUNCI
  • Dacă-atunci-altfel
  • IF-THEN-ELSIF
  • NIDED-IF
  • CAZ
  • CAZ CAUTAT

În acest tutorial, veți învăța-

  • Introducere în declarațiile de luare a deciziilor
  • Declarație IF-THEN
  • Declarație IF-THEN-ELSE
  • Declarație IF-THEN-ELSIF
  • Declarație NESTED-IF

Declarație IF-THEN

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

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

Sintaxa pentru declarațiile IF THEN:

IF THEN-executed only if the condition returns TRUEEND if;
  • În sintaxa de mai sus, cuvântul cheie „IF” va fi urmat de o condiție care se evaluează la „TRUE” / „FALSE”.
  • Controlul va executa numai dacă condiția returnează .
  • În cazul în care condiția se evaluează la , SQL va sări peste și va începe să execute codul lângă blocul „END IF”.

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

Exemplul 1 : În acest exemplu, vom imprima 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 o valoare mai mare de 100, executăm următorul cod.

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

Explicatie cod:

  • Linia de cod 2: Declararea variabilei „a” ca tip de date „NUMĂR” și inițializarea acesteia cu valoarea „10”.
  • Linia de cod 4: Tipărirea declarației „Programul a început”.
  • Linia de cod 5: Verificarea stării, dacă variabila „a” este mai mare decât „100”.
  • Linia de cod 6: Dacă „a” este mai mare decât „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ă, deci declarația de imprimare de mai sus a fost ignorată.
  • Linia de cod 8: Tipărirea declarației „Program finalizat”.

Ieșire cod:

Program started.Program completed. 

Exemplul 2: În acest exemplu, vom imprima un mesaj dacă un alfabet dat este prezent în vocalele englezești (A, E, I, O, U).

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

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

Explicatie cod:

  • Linia de cod 2: Declararea variabilei „a” ca „CHAR” de tipul de date de dimensiune „1” și inițializarea acesteia cu valoarea „u”.
  • Linia de cod 4: Verificarea stării, dacă variabila „a” este prezentă în listă („A”, „E”, „I”, „O”, „U”).
  • Valoarea „a” a fost convertită în majuscule înainte de comparare pentru a face comparația care nu face sensibilitate la majuscule.
  • Linia de cod 5: Dacă „a” este prezent în listă, atunci va fi tipărită afirmația „Caracterul este în vocalele englezești”. Dacă condiția a eșuat, atunci acest program nu va oferi nicio ieșire, deoarece în afara blocului IF-THEN nu am emis nicio declarație de imprimare.

Ieșire cod:

The character is in English Vowels

Declarație IF-THEN-ELSE

  • Instrucțiunea IF-THEN-ELSE este utilizată în principal pentru a selecta între două alternative pe baza condiției.
  • Mai jos este reprezentarea sintaxică a declarației IF-THEN-ELSE.

Sintaxa pentru declarațiile IF-THEN-ELSE:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • În sintaxa de mai sus, cuvântul cheie „IF” va fi urmat de o condiție care se evaluează la „TRUE” / „FALSE”.
  • Controlul va executa numai dacă condiția returnează .
  • În cazul în care condiția se evaluează la , SQL va executa .
  • În orice caz, unul dintre cele două blocuri de acțiune va fi executat.

Notă: Ori de câte ori condiția se evaluează la „NULL”, atunci SQL va trata „NULL” ca „FALS”.

Exemplul 1 : În acest exemplu, vom imprima mesajul dacă numărul dat este impar sau par.

DECLAREa NUMBER:=11;BEGINdbms_output.put_line (‘Program started');IF( mod(a,2)=0) THENdbms_output.put_line('a is even number' );ELSEdbms_output.put_line('a is odd number1);END IF;dbms_output.put_line (‘Program completed.’);END;/

Explicatie cod:

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

Ieșire cod:

Program started.a is odd numberProgram completed. 

Declarație IF-THEN-ELSIF

  • Declarația IF-THEN-ELSIF este utilizată în principal în cazul în care ar trebui aleasă o alternativă dintr-un set de alternative, în care fiecare alternativă are propriile condiții de îndeplinit.
  • Primele condiții care returnează vor fi executate, iar condițiile rămase vor fi omise.
  • Instrucțiunea IF-THEN-ELSIF poate conține blocul „ELSE”. Acest bloc „ELSE” va fi executat dacă niciuna dintre condiții nu este îndeplinită.

Notă : blocul ELSE este opțional în această declarație condițională. Dacă nu există niciun bloc ELSE și niciuna dintre condițiile îndeplinite, atunci controlerul va sări peste tot blocul de acțiune și va începe să execute partea rămasă a codului.

Sintaxa pentru declarațiile IF-THEN-ELSIF:

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • În sintaxa de mai sus, controlul va executa numai dacă condiția1 returnează .
  • Dacă condiția1 nu este îndeplinită, atunci controlerul va verifica condiția2.
  • Controlerul va ieși din declarația IF în următoarele două cazuri.
    • Când controlerul a găsit orice condiție care returnează . În acest caz, action_block corespunzător va fi executat și controlerul va ieși din acest bloc de instrucțiuni IF și va începe să execute codul rămas.
    • Când niciuna dintre condiții nu este îndeplinită, controlerul de atunci va executa blocul ELSE dacă este prezent, apoi va ieși din instrucțiunea IF.

Notă: Ori de câte ori condiția se evaluează la „NULL”, atunci SQL va trata „NULL” ca „FALS”.

Exemplul 1: Fără bloc ELSE

În acest exemplu, vom imprima nota pe baza notelor date fără alte condiții (nota> = 70 Grad A, nota> = 40 și nota <70 Grad B, nota> = 35 și nota <40 Grad C).

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

Explicatie cod:

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

Ieșire cod:

Program started.Grade BProgram completed.

Exemplul 2 : Cu blocul ELSE

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

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

Explicatie cod:

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

Ieșire cod:

Program started.No GradeProgram completed.

Declarație NESTED-IF

  • Instrucțiunea NESTED-IF este practic permisă programatorilor să plaseze una sau mai multe condiții „IF” în interiorul altei condiții „IF” , altele decât instrucțiunile normale.
  • Fiecare condiție „IF” ar trebui să aibă o instrucțiune „END IF” separată care marchează sfârșitul domeniului de acțiune al aceluiași .
  • Declarația „IF” va considera cea mai apropiată declarație „END IF” ca punct final pentru acea condiție particulară.
  • Reprezentarea picturală pentru NESTED-IF este prezentată mai jos pe diagramă.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END IF; -END IF corresponds to condition1
Sintaxă Explicație:
  • În sintaxa de mai sus, IF-ul exterior conține încă o instrucțiune IF în blocul său de acțiune.
  • Condiția1 returnează , apoi controlul va executa și verifică condiția2.
  • Dacă condiția2 returnează și , atunci va fi executat și .
  • În cazul condiției2, se evaluează la , SQL va omite .

Aici vom vedea un exemplu de Nested If -

Exemplu de declarație imbricată: If: Cel mai mare număr din trei

În acest exemplu, vom imprima cel mai mare dintre cele trei numere folosind instrucțiunea Nested-If. Numerele vor fi atribuite în partea de declarare, după cum puteți vedea în codul de mai jos, adică Număr = 10,15 și 20, iar numărul maxim va fi preluat folosind instrucțiuni imbricate-if.

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

Explicatie cod:

  • 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 declarației „Programul a început” (linia 6).
  • Linia de cod 7: Verificarea stării1, 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 va fi tipărit mesajul „A este cel mai mare” (linia 11). Altfel dacă condiția2 eșuează, atunci „C este cel mai mare” va fi tipărit (linia 13).
  • Linia de cod 18: În cazul în care condiția 1 returnează fals, 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 declarației „Program finalizat” (linia 24).

Ieșirea codului:

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

rezumat

În acest capitol, am învățat diferitele declarații de luare a deciziilor, sintaxa și exemplele acestora. Tabelul de mai jos prezintă rezumatul diferitelor afirmaț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ți un anumit cod pe baza condiției.

Dacă-atunci-altfel

Verifică o condiție booleană, dacă codul TRUE din blocul „THEN” va fi executat, dacă codul fals din blocul „ELSE” este executat.

Cel mai potrivit în condiția „ACESTA-SAU ACEASTA”.

IF-THEN-ELSIF

Verifică o stare 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șnuiam să alegem mai mult de două alternative.

NIDED-IF

Permite una sau mai multe instrucțiuni IF-THEN sau IF-THEN-ELSIF în alte instrucțiuni IF-THEN sau IF-THEN-ELSIF.

Utilizat în principal în situația de imbricare.