Oracle PL/SQL PETLJA s primjerom
Što su petlje?
Petlje omogućuju da se određeni dio koda u programu izvrši željeni broj puta.
U ovom vodiču ćemo vidjeti koncept petlje u PL/SQL i tijek kontrole u petljama.
Uvod u koncept petlji
Koncept petlji pruža sljedeću prednost u kodiranju.
- Ponovno korištenje koda
- Smanjena veličina koda
- Jednostavan protok kontrole
- Smanjena složenost
Donji dijagram na slikovit način prikazuje koncept petlje
U gornjem dijagramu, uvjet petlje će biti provjeren, i sve dok je uvjet petlje zadovoljen, izvršni blok će se izvršiti.
U svakoj iteraciji, varijabla brojača petlje koja zapravo odlučuje o uvjetu petlje treba se modificirati kako bi kontrola izašla iz petlje. U nekim slučajevima, ova varijabla brojača petlje je operator povećanja/smanjenja za unaprijed definirani broj, au nekim slučajevima to je uvjet pretraživanja koji nastavlja izvršavati blok dok ga ne zadovolji.
Izjave o kontroli petlje
Prije učenja koncepta petlje, obavezno je naučiti naredbe za kontrolu petlje. Izjave kontrole petlje su one koje zapravo kontroliraju tijek izvršenja unutar petlje. Ispod je detaljan opis izjava o kontroli petlje.
NASTAVI
Ova ključna riječ šalje instrukciju PL/SQL stroju da kad god PL/SQL stroj naiđe na tu ključnu riječ unutar petlje, preskočit će preostali kod u izvršnom bloku koda, a sljedeća će iteracija započeti odmah. Ovo će se uglavnom koristiti ako kod unutar petlje želi biti preskočen za određene vrijednosti ponavljanja.
IZLAZITI / IZLAZITI KADA
Ova ključna riječ šalje instrukciju PL/SQL mašini da će, kad god PL/SQL mašina naiđe na ovu ključnu riječ, odmah izaći iz trenutne petlje. Ako PL/SQL mehanizam naiđe na EXIT u ugniježđenoj petlji, tada će izaći iz petlje u kojoj je definiran, tj. u ugniježđenim petljama, davanjem EXIT-a u unutarnjoj petlji izaći će samo kontrola iz unutarnje petlje, ali ne iz vanjske petlje. Iza 'EXIT WHEN' slijedi izraz koji daje Booleov rezultat. Ako je rezultat TRUE, tada će kontrola izaći.
GOTO
Ova izjava će prenijeti kontrolu na označenu izjavu (“GOTO ;”). Ovo ima sljedeća ograničenja
- Prijenos kontrole moguće je izvršiti samo unutar potprograma.
- Prijenos kontrole ne može se izvršiti s dijela za rukovanje iznimkama na dio za izvođenje
Korištenje ove izjave se ne preporučuje osim ako ne postoje druge alternative, jer će sljedivost kontrole koda biti vrlo teška u programu zbog prijenosa kontrole s jednog dijela na drugi dio.
Vrste petlji u PL/SQL
PL / SQL nudi sljedeće tri vrste petlji
- Osnovna naredba petlje
- Naredba za petlju
- Dok naredba petlje
Osnovna naredba petlje
Ova izjava petlje je najjednostavnija struktura petlje u PL/SQL. Izvršni blok počinje ključnom riječi 'LOOP' i završava ključnom riječi 'END LOOP'.
Izlazni uvjet treba dati unutar ovog izvršnog bloka tako da kontrolira izlaz iz petlje.
Za izlazak iz petlje potrebna je eksplicitna ključna riječ EXIT u dijelu za izvođenje.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Objašnjenje sintakse:
- U gornjoj sintaksi ključna riječ 'LOOP' označava početak petlje, a 'END LOOP' označava kraj petlje.
- Izvršni blok sadrži sav kod koji se treba izvršiti uključujući uvjet EXIT.
- Izvršni dio može sadržavati bilo koju naredbu o izvršenju.
Bilješka: Osnovna naredba petlje bez ključne riječi EXIT bit će BESKONAČNA PETLJA koja se nikada neće zaustaviti.
Primjer 1: U ovom primjeru ispisat ćemo brojeve od 1 do 5 koristeći osnovnu naredbu petlje. Za to ćemo izvršiti sljedeći kod.
DECLARE a NUMBER:=1; BEGIN dbms_output.put_line('Program started.'); LOOP dbms_output.put_line(a); a:=a+1; EXIT WHEN a>5; END LOOP; dbms_output.put_line('Program completed'); END: /
Objašnjenje koda:
- Kodna linija 2: Deklaracija varijable 'a' kao tipa podataka 'BROJ' i njeno inicijaliziranje s vrijednošću '1'.
- Kodna linija 4: Ispis izjave “Program je pokrenut”.
- Redak koda 5: Ključna riječ 'LOOP' označava početak petlje.
- Redak koda 6: Ispisuje vrijednost 'a'.
- Redak koda 7: Povećava vrijednost 'a' za +1.
- Redak koda 8: Provjerava je li vrijednost 'a' veća od 5.
- Redak koda 9: Ključna riječ 'END LOOP' označava kraj izvedbenog bloka.
- Kôd od retka 6 do retka 8 nastavit će se izvršavati sve dok 'a' ne dosegne vrijednost 6, jer će uvjet vratiti TRUE, a kontrola će IZLAZITI iz petlje.
- Redak koda 10: Ispis izjave "Program završen"
Označavanje petlji
U PL/SQL, petlje se mogu označiti. Oznaka treba biti između “<<” i “>>”. Označavanje petlji, posebno u kodovima ugniježđenih petlji, omogućit će veću čitljivost. Oznaka se može dati u naredbi EXIT za izlaz iz te određene petlje. Korištenjem oznake, kontrola se može izvesti tako da izravno izađe iz vanjske petlje ugniježđenih petlji s bilo kojeg mjesta unutar petlji, davanjem naredbe za izlaz nakon koje slijedi oznaka vanjske petlje.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <executi_block_ends> END LOOP;
Objašnjenje sintakse:
- U gornjoj sintaksi, izlazna petlja ima još jednu petlju unutar sebe.
- '< >' i '< >' su oznake ovih petlji.
Primjer 1: U ovom primjeru ispisat ćemo broj počevši od 1 koristeći osnovnu naredbu petlje. Svaki će se broj ispisati onoliko puta koliko iznosi njegova vrijednost. Gornja granica niza je fiksirana u dijelu deklaracije programa. Naučimo kako možemo koristiti koncept oznake da to postignemo. Za to ćemo izvršiti sljedeći kod
DECLARE a NUMBER:=0; b NUMBER; upper-limit NUMBER :=4; BEGIN dbms_output.put_line(‘Program started.' ); «outerloop» LOOP a:=a+1; b:=l; «inner loop» LOOP EXIT outer_loop WHEN a > upper_limit; dbms_output.put_line(a); b:=b+l; EXIT inner_loop WHEN b>a; END LOOP; END LOOP; dbms_output.put_line('Program completed.'); END; /
Objašnjenje koda:
- Redak koda 2-3: Deklaracija varijabli 'a' i 'b' kao tipa podataka 'BROJ'.
- Kodna linija 4: Deklaracija varijable 'upper_limit' kao tipa podataka 'NUMBER' s vrijednošću '4'
- Kodna linija 6: Ispis izjave “Program je pokrenut”.
- Redak koda 7: Vanjska petlja je označena kao "outer_loop"
- Redak koda 9: Vrijednost 'a' se povećava za 1.
- Redak koda 11: Unutarnja petlja je označena kao "unutarnja petlja".
- Redak koda 13: EXIT uvjet koji provjerava je li vrijednost 'a' viša od vrijednosti 'upper_limit'. Ako ne, onda će ići dalje, inače izlazi izravno iz vanjske petlje.
- Redak koda 14: Ispis vrijednosti 'b'.
- Redak koda 15: Povećava vrijednost 'b' za +1.
- Redak koda 16: EXIT uvjet koji provjerava je li vrijednost 'b' veća od 'a'. Ako je tako, tada će izaći iz kontrole unutarnje petlje.
- Redak koda 14: Ispis izjave "Program završen"
rezime
Petlja | Osnovna petlja |
Kriteriji za IZLAZ | Izađite kada naiđete na ključnu riječ 'EXIT' u izvršnom dijelu |
Upotreba | Dobro je koristiti kada se izlaz ne temelji na određenom stanju. |