Oracle LOOP PL/SQL con esempio
Cosa sono i loop?
I cicli consentono di eseguire una determinata parte del codice in un programma per il numero di volte desiderato.
In questo tutorial vedremo il concetto di loop in PL/SQL e il flusso di controllo nei loop.
Introduzione al concetto di loop
Il concetto di loop offre i seguenti vantaggi nella codifica.
- Riutilizzabilitร del codice
- Dimensione del codice ridotta
- Facile flusso di controllo
- Complessitร ridotta
Il diagramma sottostante mostra il bagnoping concetto in modo pittorico
Nel diagramma precedente, verrร verificata la condizione del ciclo e, finchรฉ sarร soddisfatta, il blocco di esecuzione verrร eseguito.
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 del contatore del ciclo รจ 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 conoscere 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 loop.
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 saltato 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 ciclo annidato, uscirร dal ciclo in cui รจ stato definito, ovvero in cicli annidati, fornendo EXIT nel ciclo interno si uscirร dal controllo solo dal ciclo interno ma non dal circuito esterno. 'EXIT WHEN' รจ seguito da un'espressione che fornisce un risultato booleano. Se il risultato รจ TRUE, il controllo uscirร .
GOTO
Questa istruzione trasferirร il controllo all'istruzione etichettata ("GOTO ;"). Ciรฒ presenta le seguenti restrizioni
- Il trasferimento del controllo puรฒ essere effettuato solo all'interno dei sottoprogrammi.
- Il trasferimento del controllo non puรฒ essere effettuato dalla parte di gestione delle eccezioni alla parte di esecuzione
L'utilizzo di questa dichiarazione non รจ raccomandato a meno che non vi siano altre alternative, poichรฉ il controllo del codice tracLa facilitร d'uso 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
- Dichiarazione di ciclo di base
- Per l'istruzione del ciclo
- Dichiarazione del ciclo while
Dichiarazione di ciclo di base
Questa istruzione di loop รจ la struttura di 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 fornita 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.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Spiegazione della sintassi:
- Nella sintassi precedente, la parola chiave "LOOP" segna l'inizio del ciclo e "END LOOP" segna 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 di ciclo di base senza la parola chiave EXIT sarร un LOOP INFINITO che non si fermerร mai.
esempio 1: In questo esempio, stamperemo un numero da 1 a 5 usando un'istruzione di ciclo di base. Per questo, eseguiremo il seguente codice.
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 Spiegazione:
- Code Linea 2: Dichiarare la variabile "a" come tipo di dati "NUMERO" e inizializzarla con il valore "1".
- Code Linea 4: Stampa della scritta โProgramma avviatoโ.
- Code riga 5: La parola chiave "LOOP" segna l'inizio del ciclo.
- Code riga 6: Stampa il valore di "a".
- Code riga 7: Incrementa il valore di "a" di +1.
- Code riga 8: Controlla se il valore di "a" รจ maggiore di 5.
- Code riga 9: La parola chiave 'END LOOP' segna la fine del blocco di esecuzione.
- Il codice dalla riga 6 alla riga 8 continuerร ad essere eseguito finchรฉ 'a' non raggiunge il valore 6, poichรฉ la condizione restituirร TRUE e il controllo uscirร dal ciclo.
- Code riga 10: Stampa della dicitura โ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 fornita nel comando EXIT per uscire da quel particolare ciclo. Utilizzando label, รจ possibile fare in modo che il controllo esca direttamente dal ciclo esterno dei cicli nidificati da qualsiasi punto all'interno dei cicli, fornendo il comando exit seguito dall'etichetta del ciclo esterno.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <executi_block_ends> END LOOP;
Spiegazione della sintassi:
- Nella sintassi precedente, il ciclo out ha un ulteriore ciclo al suo interno.
- Il '< >' e '< >' sono le etichette di questi cicli.
esempio 1: In questo esempio, stamperemo un numero a partire da 1 usando l'istruzione Basic loop. 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 usare il concetto di etichetta per raggiungere questo obiettivo. Per questo, eseguiremo il seguente codice
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;
/
Code Spiegazione:
- Code riga 2-3: Dichiarando le variabili 'a' e 'b' come tipo di dati 'NUMERO'.
- Code Linea 4: Dichiarando la variabile 'upper_limit' come tipo di dati 'NUMBER' con valore '4'
- Code Linea 6: Stampa della scritta โProgramma avviatoโ.
- Code riga 7: Il ciclo esterno รจ stato etichettato come โouter_loopโ
- Code riga 9: Il valore di "a" viene incrementato di 1.
- Code riga 11: Il ciclo interno รจ stato etichettato come "inner_loop".
- Code riga 13: Condizione di USCITA che controlla se il valore "a" รจ superiore al valore "upper_limit". In caso contrario, andrร oltre, altrimenti uscirร direttamente dal ciclo esterno.
- Code riga 14: Stampa del valore di 'b'.
- Code riga 15: Incrementa il valore di 'b' di +1.
- Code riga 16: Condizione di USCITA che controlla se il valore di 'b' รจ maggiore di 'a'. Se รจ cosรฌ, uscirร dal controllo dal ciclo interno.
- Code riga 14: Stampa della dicitura โProgramma completatoโ
Sintesi
| Ciclo continuo | Ciclo di base |
| Criteri di uscita | Esci quando incontra la parola chiave "EXIT" nella parte di esecuzione |
| Impiego | Utile da utilizzare quando l'uscita non รจ basata su alcuna condizione particolare. |






