Izjava Oracle PL / SQL, ČE POTEM DRUG: ELSIF, NESTED-IF

Kazalo:

Anonim

Kaj so izjave o odločanju?

Stavki odločanja so tisti, ki se bodo glede nadzora pogojev odločili za nadzor pretoka stavkov SQL. Programerju omogoča boljši nadzor nad preprečevanjem izvajanja določene kode (diagram 1) ali izbiro želene kode glede na stanje (diagram 2). Spodaj je slikovna predstavitev "Izjave o odločanju".

Diagram izjav odločanja

Vrste izjav o odločanju:

Oracle ponuja naslednje vrste izjav o odločanju.

  • ČE, POTEM
  • ČE-TADA-DRUGJE
  • ČE-TADA-ELSIF
  • NESTED-IF
  • OVITEK
  • ISKANI ZADEV

V tej vadnici boste izvedeli-

  • Uvod v izjave o odločanju
  • IZJAVA ČE-TADA
  • IZJAVA ČE-TADA-VSE
  • Izjava IF-THEN-ELSIF
  • Izjava NESTED-IF

IZJAVA ČE-TADA

Stavek IF-THEN se v glavnem uporablja za izvajanje določenega odseka kod le, če je pogoj izpolnjen.

Pogoj mora vsebovati logično vrednost (True / False). To je osnovni pogojni stavek, ki bo ORACLE-u omogočil izvajanje / preskakovanje določenega dela kode na podlagi vnaprej določenih pogojev.

Sintaksa za stavke IF THEN:

IF THEN-executed only if the condition returns TRUEEND if;
  • V zgornji sintaksi bo ključni besedi 'IF' sledil pogoj, ki bo ocenjen na 'TRUE' / 'FALSE'.
  • Kontrolnik bo izvedel samo, če bo stanje vrnilo .
  • V primeru, da se stanje izračuna na , potem SQL preskoči in začne izvajati kodo poleg bloka 'END IF'.

Opomba: Kadar koli je stanje ovrednoteno s 'NULL', bo SQL obravnaval 'NULL' kot 'FALSE'.

Primer 1 : V tem primeru bomo natisnili sporočilo, ko bo število večje od 100. Za to bomo izvedli naslednjo kodo

Za tiskanje sporočila, ko ima številka vrednost večjo od 100, izvedemo naslednjo kodo.

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

Razlaga kode:

  • Vrstica kode 2: Spremenljivka "a" se razglasi za podatkovni tip "ŠTEVILO" in se inicializira z vrednostjo "10".
  • Vrstica kode 4: Tiskanje stavka "Program se je začel".
  • Vrstica kode 5: Preverjanje stanja, ali je spremenljivka "a" večja od "100".
  • 6. vrstica kode: Če je 'a' večje od '100', bo natisnjeno 'a je večje od 100'. Če je 'a' manjši ali enak 100, potem stanje ne uspe, zato je zgornji izpis za tiskanje prezrt.
  • Vrstica kode 8: Tiskanje stavka "Program zaključen".

Izhod kode:

Program started.Program completed. 

Primer 2: V tem primeru bomo natisnili sporočilo, če je določena abeceda prisotna v angleških samoglasnikih (A, E, I, O, U).

Za tiskanje sporočila, ko je dani znak samoglasnik, izvedemo naslednjo kodo.

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

Razlaga kode:

  • Vrstica kode 2: Spremenljivka "a" se razglasi za "CHAR" velikosti "1" podatkovnega tipa in se inicializira z vrednostjo "u".
  • Vrstica kode 4: Preverjanje pogoja, ali je na seznamu prisotna spremenljivka „a“ („A“, „E“, „I“, „O“, „U“).
  • Vrednost 'a' je bila pred primerjavo pretvorjena v velike črke, da primerjava ne razlikuje med velikimi in malimi črkami.
  • Vrstica kode 5: Če je na seznamu 'a', bo natisnjena izjava "Znak je v samoglasnikih". Če pogoj ni uspel, potem ta program ne bo dal nobenega izhoda, saj zunaj bloka IF-THEN nismo izdali nobenega izpisa za tiskanje.

Izhod kode:

The character is in English Vowels

IZJAVA ČE-TADA-VSE

  • Stavek IF-THEN-ELSE se v glavnem uporablja za izbiro dveh možnosti glede na stanje.
  • Spodaj je predstavitev skladnje stavka IF-THEN-ELSE.

Sintaksa za stavke IF-THEN-ELSE:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • V zgornji sintaksi bo ključni besedi 'IF' sledil pogoj, ki bo ocenjen na 'TRUE' / 'FALSE'.
  • Kontrolnik bo izvedel le, če bo pogoj vrnil .
  • V primeru, da se stanje izračuna na , bo SQL izvedel .
  • V vsakem primeru bo izveden eden od obeh akcijskih blokov.

Opomba: Kadar koli stanje oceni na 'NULL', bo SQL obravnaval 'NULL' kot 'FALSE'.

Primer 1 : V tem primeru bomo natisnili sporočilo, ali je dano število liho ali sodo.

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

Razlaga kode:

  • Vrstica kode 2: Spremenljivka "a" se razglasi za podatkovni tip "ŠTEVILO" in se inicializira z vrednostjo "11".
  • Vrstica kode 4: Tiskanje stavka "Program se je začel".
  • Vrstica kode 5: Preverjanje pogoja, ali je modul spremenljivke 'a' z '2' 0.
  • 6. vrstica kode: Če je '0', bo natisnjeno "a je sodo število".
  • Vrstica kode 7: Če vrednost modula ni enaka '0', potem vrne pogoj , zato bo natisnjeno sporočilo "a je neparno število".
  • Koda vrstica 10: Tiskanje stavka "Program zaključen"

Izhod kode:

Program started.a is odd numberProgram completed. 

Izjava IF-THEN-ELSIF

  • Izjava IF-THEN-ELSIF se uporablja predvsem tam, kjer je treba izbrati eno izmed možnosti med naborom alternativ, pri čemer ima vsaka možnost svoje pogoje, ki jih mora izpolniti.
  • Izvedeni bodo prvi pogoji, ki vrnejo , ostali pogoji pa bodo preskočeni.
  • Stavek IF-THEN-ELSIF lahko v sebi vsebuje blok 'ELSE'. Ta blok 'ELSE' se izvede, če ni izpolnjen noben pogoj.

Opomba : blok ELSE v tem pogojnem stavku ni obvezen. Če ni bloka ELSE in ni izpolnjen noben pogoj, bo krmilnik preskočil ves akcijski blok in začel izvajati preostali del kode.

Sintaksa za izjave IF-THEN-ELSIF:

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • V zgornji sintaksi bo kontrolnik izvedel le, če pogoj1 vrne .
  • Če pogoj1 ni izpolnjen, bo krmilnik preveril stanje2.
  • Krmilnik bo v naslednjih dveh primerih izstopil iz stavka IF.
    • Ko je krmilnik našel kateri koli pogoj, ki vrne . V tem primeru se izvede ustrezen blok_akcij_ in krmilnik bo zapustil ta blok stavka IF in začel izvajati preostalo kodo.
    • Ko ni izpolnjen noben pogoj, bo takratni krmilnik izvedel blok ELSE, če je prisoten, nato pa bo izstopil iz stavka IF.

Opomba: Kadar koli stanje oceni na 'NULL', bo SQL obravnaval 'NULL' kot 'FALSE'.

Primer 1: Brez bloka ELSE

V tem primeru bomo oceno natisnili na podlagi danih ocen brez drugega pogoja (oznaka> = 70 Ocena A, ocena> = 40 in oznaka <70 Ocena B, ocena> = 35 in oznaka <40 Ocena 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;/

Razlaga kode:

  • Vrstica kode 2: Spremenljivka 'mark' se razglasi za podatkovni tip 'ŠTEVILO' in se inicializira z vrednostjo '55'.
  • Vrstica kode 4: Tiskanje stavka "Program se je začel".
  • Vrstica kode 5: Preverjanje pogoja1, ali je "oznaka" večja ali enaka 70.
  • Vrstica kode 7: Ker pogoj1 ni uspel, je preverjen pogoj2 '70> mark> = 40 '.
  • Vrstica kode 8: Pogoj2 vrne , zato bo natisnjeno sporočilo »Ocena B«.
  • Koda 12. vrstica: Tiskanje stavka "Program zaključen".
  • V tem primeru bo pogoj3 'oznaka <35' preskočen, saj je krmilnik našel en pogoj, ki pred pogojem3 vrne .

Izhod kode:

Program started.Grade BProgram completed.

Primer 2 : Z blokom ELSE

V tem primeru bomo oceno natisnili na podlagi danih ocen s pogojem else (ocena> = 70 Ocena A, ocena> = 40 in oznaka <70 Ocena B, ocena> = 35 in oznaka <40 Ocena C, sicer "Brez ocene").

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

Razlaga kode:

  • Vrstica kode 2: Spremenljivka 'mark' se razglasi za podatkovni tip 'ŠTEVILO' in se inicializira z vrednostjo '25'.
  • Vrstica kode 4: Tiskanje stavka "Program se je začel".
  • Vrstica kode 5: Preverjanje pogoja 1, ali je "oznaka" večja ali enaka 70.
  • Vrstica kode 7: Ker pogoj1 ni uspel, je preverjen pogoj2 '70> mark> = 40 '.
  • Vrstica kode 8: Ker stanje2 ni uspelo, je preverjeno stanje3 '40> oznaka> = 35 '.
  • Vrstica kode 11: Ker niso izpolnjeni vsi pogoji, bo nadzor zdaj preveril prisotnost bloka ELSE in bo iz bloka ELSE natisnil sporočilo »Ni ocene«.
  • Vrstica kode 14: Tiskanje stavka "Program zaključen".

Izhod kode:

Program started.No GradeProgram completed.

Izjava NESTED-IF

  • Stavek NESTED-IF v bistvu dovoljuje programerjem, da postavijo enega ali več pogojev "IF" v drugega pogoja "IF", razen običajnih stavkov.
  • Vsak pogoj „IF“ mora imeti ločen stavek „END IF“, ki označuje konec obsega tega določenega .
  • Stavek „IF“ bo najbližji stavek „END IF“ upošteval kot končno točko za to posebno stanje.
  • Slikovna predstavitev za NESTED-IF je prikazana spodaj na diagramu.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END IF; -END IF corresponds to condition1
Pojasnilo sintakse:
  • V zgornji sintaksi zunanji IF v bloku dejanj vsebuje še en stavek IF.
  • Pogoj1 vrne , nato bo nadzor izvedel in preveril stanje2.
  • Če condition2 vrne tudi , se izvede tudi .
  • V primeru, da pogoj2 oceni na , potem SQL preskoči .

Tukaj bomo videli primer ugnezdenega če -

Primer izjave ugnezdene- če: največja od treh številk

V tem primeru bomo z uporabo stavka Nested-If natisnili največjo od treh številk. Številke bodo dodeljene v delu za izjavo, kot lahko vidite v spodnji kodi, tj. Število = 10,15 in 20, največje število pa bo pridobljeno z uporabo ugnezdenih stavkov.

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

Razlaga kode:

  • Vrstica kode 2: Spremenljivka "a" se razglasi za podatkovni tip "ŠTEVILO" in se inicializira z vrednostjo "10".
  • Vrstica kode 3: Spremenljivka 'b' se razglasi za podatkovni tip 'ŠTEVILO' in se inicializira z vrednostjo '15'.
  • Vrstica kode 4: Spremenljivka 'c' se razglasi za podatkovni tip 'ŠTEVILO' in se inicializira z vrednostjo '20'.
  • 6. vrstica kode: Tiskanje stavka "Program se je začel" (6. vrstica).
  • Vrstica kode 7: Preverjanje stanja1, ali je 'a' večje od 'b' (vrstica 7).
  • Vrstica kode 10: Če je 'a' večja od 'b, bo pogoj v' ugnezdeni-če 1 'preveril, ali je' a 'večji od' c '(vrstica 10).
  • Vrstica kode 13: Če je še vedno 'a' večja, se natisne sporočilo 'A je največja' (vrstica 11). V nasprotnem primeru, če pogoj2 ne uspe, se natisne napis »C je največji« (vrstica 13).
  • Vrstica kode 18: V primeru, da condition1 vrne false, bo pogoj v 'ugnezdeni-če 2' preveril, ali je 'b' večji od 'c' (vrstica 18).
  • Vrstica kode 21: Če je 'b' večja od 'c', bo natisnjeno sporočilo 'B je največje' (vrstica 19), drugače, če pogoj2 ne uspe, bo natisnjeno 'C je največje' (vrstica 21).
  • Vrstica kode 24: Tiskanje stavka "Program zaključen" (vrstica 24).

Izhod kode:

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

Povzetek

V tem poglavju smo se naučili različnih izjav odločanja ter njihove sintakse in primerov. Spodnja tabela vsebuje povzetek različnih pogojnih izjav, o katerih smo razpravljali.

TIP

OPIS

UPORABA

ČE, POTEM

Preveri logično stanje, če bo izvedena koda TRUE v bloku 'THEN'.

Če želite preskočiti, / izvedite določeno kodo glede na pogoj.

ČE-TADA-DRUGJE

Preveri logično stanje, če bo izvedena TRUE koda v bloku 'THEN', če se izvede lažna koda v bloku 'ELSE'.

Najbolj primerno v stanju "TO-ALI-TO".

ČE-TADA-ELSIF

Preveri logično stanje v zaporednem vrstnem redu. Izvede se prvi blok v zaporedju, ki vrne stanje TRUE. Če noben pogoj v zaporedju ni TRUE, se izvede koda v bloku 'ELSE'.

Včasih so izbirali med več kot dvema alternativama.

NESTED-IF

Omogoča enega ali več stavkov IF-THEN ali IF-THEN-ELSIF znotraj drugih stavkov IF-THEN ali IF-THEN-ELSIF.

V glavnem se uporablja v ugnezdenih razmerah.