Oracle PL/SQL PETLJA s primjerom
⚡ Pametni sažetak
PL/SQL petlje izvršavaju dio koda više puta željeni broj puta. PL/SQL nudi osnovne petlje FOR i WHILE, kontrolirane s CONTINUE, EXIT, EXIT WHEN i GOTO, a petlje se mogu označiti za čisto upravljanje ugniježđenim strukturama.
Što su petlje?
Petlje omogućuju izvršavanje određenog dijela koda u programu željeni broj puta. U ovom vodiču ćemo pogledati koncept petlji u PL/SQL-u i tijek upravljanja u petljama.
Uvod u koncept petlji
Koncept petlji pruža sljedeće prednosti u kodiranju:
- Ponovna upotrebljivost koda.
- Smanjena veličina koda.
- Jednostavan protok kontrole.
- Smanjena složenost.
Donji dijagram prikazuje WCping koncept.
Na gornjem dijagramu provjerava se uvjet petlje i, sve dok je ispunjen, izvršava se blok.
U svakoj iteraciji, varijabla brojača petlje koja odlučuje da se uvjet petlje treba promijeniti kako bi upravljačka jedinica izašla iz petlje. U nekim slučajevima ovaj brojač je inkrement ili dekrement za unaprijed definirani broj, a u drugima je uvjet pretraživanja koji nastavlja izvršavati blok dok se ne zadovolji.
Izjave o kontroli petlje
Prije učenja koncepta petlji, važno je naučiti naredbe za upravljanje petljom. Ove naredbe kontroliraju tok izvršavanja unutar petlje.
NASTAVI
Ova ključna riječ upućuje PL/SQL engine da kad god naiđe na CONTINUE unutar petlje, preskoči preostali kod u bloku izvršenja i odmah pokrene sljedeću iteraciju. Ovo se uglavnom koristi kada se kod unutar petlje treba preskočiti za određene vrijednosti iteracije.
IZLAZITI / IZLAZITI KADA
Ova ključna riječ upućuje PL/SQL mehanizam da odmah izađe iz trenutne petlje. U ugniježđenoj petlji, EXIT u unutarnjoj petlji izlazi samo iz unutarnje petlje, a ne i iz vanjske petlje. Nakon 'EXIT WHEN' slijedi izraz koji daje logički rezultat; ako je rezultat TRUE, kontrola izlazi.
GOTO
Ova naredba prenosi kontrolu na označenu naredbu („GOTO ;“). 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 obradu iznimki na dio za izvršavanje.
Korištenje ove naredbe se ne preporučuje osim ako nema alternative, jer je kodna kontrola tracMogućnost postaje vrlo teška kada se kontrola prenosi s jednog dijela na drugi.
Vrste petlji u PL/SQL
PL / SQL nudi sljedeće tri vrste petlji:
- Osnovna naredba petlje
- Naredba za petlju
- Dok naredba petlje
Donja tablica uspoređuje ta tri prije nego što se detaljno obradi osnovna petlja.
| Petlja | Izlazni kriteriji | Najbolje koristiti kada |
|---|---|---|
| Osnovna petlja | Eksplicitni IZLAZ u bloku | Izlaz nije zasnovan na fiksnom broju ili uvjetu |
| FOR petlja | Brojač doseže kraj svog raspona | Broj iteracija je unaprijed poznat |
| WHILE petlja | Uvjet postaje lažan | Petlja bi se trebala izvršavati dok je ispunjen uvjet |
Osnovna naredba petlje
Ovo je najjednostavnija struktura petlje u PL/SQL-u. Izvršni blok počinje ključnom riječi 'LOOP' i završava s 'END LOOP'. Izlazni uvjet treba biti naveden unutar izvršnog bloka kako bi kontrola izašla iz petlje, a ključna riječ EXIT mora biti eksplicitno navedena.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Objašnjenje sintakse:
- Ključna riječ 'LOOP' označava početak petlje, a 'END LOOP' kraj.
- Izvršni blok sadrži sav kod koji se mora pokrenuti, uključujući i uvjet IZLAZA.
- Izvršni dio može sadržavati bilo koju izvršnu naredbu.
Bilješka: Osnovna naredba petlje bez ključne riječi EXIT je beskonačna petlja koja se nikada ne zaustavlja.
Primjer 1: U ovom primjeru ispisujemo brojeve od 1 do 5 koristeći osnovnu naredbu petlje.
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; /
Code Objašnjenje:
- Code redak 2: Deklarisanje varijable 'a' kao 'BROJ' i inicijalizacija s vrijednošću '1'.
- Code redak 4: Ispis izjave „Program pokrenut“.
- Code redak 5: Ključna riječ 'LOOP' označava početak petlje.
- Code redak 6: Ispisuje vrijednost 'a'.
- Code redak 7: Povećava vrijednost 'a' za 1.
- Code redak 8: Provjerava je li vrijednost 'a' veća od 5.
- Code redak 9: Ključna riječ 'END LOOP' označava kraj izvršnog bloka.
- Redci 6 do 8 nastavljaju se izvršavati sve dok 'a' ne dosegne 6, u kojem trenutku uvjet vraća TRUE i kontrola izlazi iz petlje.
- Code redak 10: Ispis izjave „Program završen“.
Označavanje petlji
U PL/SQL-u, petlje se mogu označavati. Oznaka treba biti zatvorena između "<<" i ">>". Označavanje petlji, posebno u ugniježđenim petljama, daje veću čitljivost. Oznaka se može dati u naredbi EXIT za izlaz iz te određene petlje, tako da kontrola može izravno izaći iz vanjske petlje ugniježđene strukture davanjem naredbe EXIT nakon koje slijedi oznaka vanjske petlje.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <execution_block_ends> END LOOP;
Objašnjenje sintakse:
- Vanjska petlja ima još jednu petlju unutar sebe.
- '< >' i '<' >' su oznake tih petlji.
Primjer 1: U ovom primjeru ispisujemo brojeve počevši od 1 koristeći osnovnu naredbu petlje. Svaki broj se ispisuje onoliko puta koliko mu je vrijednost. Gornja granica niza je fiksna u deklaracijskom dijelu. Za to koristimo koncept oznake.
DECLARE a NUMBER:= 0; b NUMBER; upper_limit NUMBER := 4; BEGIN dbms_output.put_line('Program started.'); <<outer_loop>> LOOP a:= a+1; b:= 1; <<inner_loop>> LOOP EXIT outer_loop WHEN a > upper_limit; dbms_output.put_line(a); b:= b+1; EXIT inner_loop WHEN b>a; END LOOP; END LOOP; dbms_output.put_line('Program completed.'); END; /
Code Objašnjenje:
- Code redak 2-3: Deklariranje varijabli 'a' i 'b' kao tipa podataka 'BROJ'.
- Code redak 4: Deklariranje varijable 'gornja_granica' kao 'BROJ' s vrijednošću '4'.
- Code redak 6: Ispis izjave „Program pokrenut“.
- Code redak 7: Vanjska petlja je označena kao „outer_loop“.
- Code redak 9: Vrijednost 'a' se povećava za 1.
- Code redak 11: Unutarnja petlja je označena kao "inner_loop".
- Code redak 13: IZLAZNI uvjet koji provjerava je li 'a' veći od vrijednosti 'upper_limit'. Ako nije, ide dalje; inače se izravno izlazi iz vanjske petlje.
- Code redak 14: Ispis vrijednosti 'b'.
- Code redak 15: Povećava vrijednost 'b' za 1.
- Code redak 16: IZLAZNI uvjet koji provjerava je li 'b' veći od 'a'. Ako jest, izlazi se iz unutarnje petlje.
- Code redak 19: Ispis izjave „Program završen“.







