Cosa sono i loop?
Loops consente a una certa parte del codice di un programma di essere eseguita per il numero di volte desiderato.
In questo tutorial, vedremo il concetto di loop in PL / SQL e il flusso di controllo nei loop. Imparerai-
- Introduzione al concetto di loop
- Dichiarazioni di controllo del loop
- Tipi di loop in PL / SQL
- Istruzione di ciclo di base
- Etichettatura dei loop
Introduzione al concetto di loop
Il concetto di loop offre il seguente vantaggio nella codifica.
- Riusabilità del codice
- Dimensioni del codice ridotte
- Facile flusso di controllo
- Complessità ridotta
Il diagramma seguente mostra il concetto di loop in modo pittorico
Nel diagramma sopra, verrà verificata la condizione del loop e, finché la condizione del loop è soddisfatta, verrà eseguito il blocco di esecuzione.
In ogni iterazione, la variabile del contatore del ciclo che decide effettivamente la condizione del ciclo deve essere modificata per far uscire il controllo dal ciclo. In alcuni casi, questa variabile contatore di loop è un operatore di incremento / decremento per un conteggio predefinito e in alcuni casi è una condizione di ricerca che continua a eseguire il blocco finché non lo soddisfa.
Dichiarazioni di controllo del loop
Prima di apprendere il concetto di loop, è obbligatorio apprendere le istruzioni di controllo del loop. Le istruzioni di controllo del ciclo sono quelle che controllano effettivamente il flusso di esecuzione all'interno del ciclo. Di seguito è riportata la descrizione dettagliata delle istruzioni di controllo del ciclo.
CONTINUA
Questa parola chiave invia un'istruzione al motore PL / SQL che ogni volta che il motore PL / SQL incontra questa parola chiave all'interno del ciclo, salterà il codice rimanente nel blocco di esecuzione del codice e l'iterazione successiva inizierà immediatamente. Questo verrà utilizzato principalmente se il codice all'interno del ciclo vuole essere ignorato per determinati valori di iterazione.
ESCI / ESCI QUANDO
Questa parola chiave invia un'istruzione al motore PL / SQL che ogni volta che il motore PL / SQL incontra questa parola chiave, uscirà immediatamente dal ciclo corrente. Se il motore PL / SQL incontra EXIT in un loop annidato, uscirà dal loop in cui è stato definito, cioè in un loop annidato, dando EXIT nel loop interno uscirà dal controllo solo dal loop interno ma non dal ciclo esterno. 'EXIT WHEN' è seguito da un'espressione che fornisce un risultato booleano. Se il risultato è TRUE, il controllo EXIT.
VAI A
Questa istruzione trasferirà il controllo all'istruzione etichettata ("GOTO
- Il trasferimento del controllo può essere effettuato solo all'interno dei sottoprogrammi.
- Non è possibile trasferire il controllo dalla parte di gestione delle eccezioni alla parte di esecuzione
L'uso di questa istruzione non è raccomandato a meno che non ci siano altre alternative, poiché la tracciabilità del controllo del codice sarà molto difficile nel programma a causa del trasferimento del controllo da una parte all'altra.
Tipi di loop in PL / SQL
PL / SQL fornisce i seguenti tre tipi di loop
- Istruzione loop di base
- Istruzione per loop
- Istruzione ciclo while
Istruzione di ciclo di base
Questa istruzione loop è la struttura loop più semplice in PL / SQL. Il blocco di esecuzione inizia con la parola chiave "LOOP" e termina con la parola chiave "END LOOP".
La condizione di uscita dovrebbe essere data all'interno di questo blocco di esecuzione in modo che il controllo esca dal ciclo.
È necessario che la parola chiave EXIT venga fornita esplicitamente nella parte di esecuzione per uscire dal ciclo.
LOOPSpiegazione della sintassi:END LOOP;
- Nella sintassi precedente, la parola chiave "LOOP" indica l'inizio del ciclo e "END LOOP" indica la fine del ciclo.
- Il blocco di esecuzione contiene tutto il codice che deve essere eseguito inclusa la condizione EXIT.
- La parte di esecuzione può contenere qualsiasi istruzione di esecuzione.
Nota: l' istruzione loop di base senza parola chiave EXIT sarà un ciclo INFINITO che non si fermerà mai.
Esempio 1 : in questo esempio, stamperemo il numero da 1 a 5 utilizzando l'istruzione loop di base. Per questo, eseguiremo il codice seguente.
DECLAREa NUMBER:=1;BEGINdbms_output.put_line('Program started.');LOOPdbms_output.put_line(a);a:=a+1;EXIT WHEN a>5;END LOOP;dbms_output.put_line('Program completed');END:/
Spiegazione del codice:
- Riga di codice 2 : dichiarazione della variabile "a" come tipo di dati "NUMERO" e inizializzazione con valore "1".
- Riga di codice 4 : stampa dell'istruzione "Programma avviato".
- Riga di codice 5: la parola chiave "LOOP" contrassegna l'inizio del ciclo.
- Riga di codice 6: stampa il valore di "a".
- Riga di codice 7: incrementa il valore di "a" di +1.
- Riga di codice 8: controlla se il valore di "a" è maggiore di 5.
- Riga di codice 9: la parola chiave "END LOOP" indica la fine del blocco di esecuzione.
- Il codice dalla riga 6 alla riga 8 continuerà ad essere eseguito fino a quando "a" non raggiunge il valore 6, poiché la condizione restituirà TRUE e il controllo uscirà dal ciclo.
- Riga di codice 10: stampa dell'istruzione "Programma completato"
Etichettatura dei loop
In PL / SQL, i loop possono essere etichettati. L'etichetta deve essere racchiusa tra "<<" e ">>". L'etichettatura dei loop, in particolare nei codici di loop annidati, darà maggiore leggibilità. L'etichetta può essere data nel comando EXIT per uscire da quel particolare ciclo. Usando label, è possibile fare in modo che il controllo esca direttamente dal loop esterno dei loop annidati da qualsiasi punto all'interno dei loop, dando il comando exit seguito dall'etichetta del loop esterno.
<Spiegazione della sintassi:>LOOP . < > LOOP --inner END LOOP; . END LOOP;
- Nella sintassi precedente, il ciclo out ha un altro ciclo al suo interno.
- "<
>" e "< >" sono le etichette di questi loop.
Esempio 1 : in questo esempio, stamperemo il numero a partire da 1 utilizzando l'istruzione del ciclo di base. Ogni numero verrà stampato tante volte quanto il suo valore. Il limite superiore della serie è fissato nella parte di dichiarazione del programma. Impariamo come possiamo utilizzare il concetto di etichetta per raggiungere questo obiettivo. Per questo, eseguiremo il seguente codice
DECLAREa NUMBER:=0;b NUMBER;upper-limit NUMBER :=4;BEGINdbms_output.put_line(‘Program started.' );«outerloop» LOOPa:=a+1;b:=l;«inner loop»LOOPEXIT 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;/
Spiegazione del codice:
- Riga di codice 2-3 : dichiarazione della variabile "a" e "b" come tipo di dati "NUMERO".
- Riga di codice 4 : dichiarazione della variabile "upper_limit" come tipo di dati "NUMBER" con valore "4"
- Riga di codice 6 : stampa dell'istruzione "Programma avviato".
- Riga di codice 7: il loop esterno è stato etichettato come "outer_loop"
- Riga di codice 9: il valore di "a" viene incrementato di 1.
- Riga di codice 11: il loop interno è stato etichettato come "inner_loop".
- Riga di codice 13: condizione EXIT che controlla se il valore "a" è maggiore del valore "upper_limit". In caso contrario, andrà oltre, altrimenti uscirà direttamente dal loop esterno.
- Riga di codice 14: stampa del valore di "b".
- Riga di codice 15: incrementa il valore di "b" di +1.
- Riga di codice 16: condizione EXIT che controlla se il valore di "b" è maggiore di "a". In tal caso, uscirà dal controllo dal ciclo interno.
- Riga di codice 14: stampa dell'istruzione "Programma completato"
Sommario
Ciclo continuo | Loop di base |
Criteri di USCITA | Esci quando incontra la parola chiave "EXIT" nella parte di esecuzione |
Utilizzo | Buono da usare quando l'uscita non è basata su una condizione particolare. |