Oracle LOOP PL/SQL con esempio
⚡ Riepilogo intelligente
I cicli PL/SQL eseguono ripetutamente una sezione di codice per un numero di volte desiderato. PL/SQL offre cicli di base, FOR e WHILE, controllati da CONTINUE, EXIT, EXIT WHEN e GOTO, e i cicli possono essere etichettati per gestire in modo ordinato le strutture annidate.
Cosa sono i loop?
I cicli consentono di eseguire una determinata porzione di codice in un programma per il numero di volte desiderato. In questo tutorial, esamineremo il concetto di ciclo in PL/SQL e il flusso di controllo al suo interno.
Introduzione al concetto di cicli
Il concetto di cicli offre i seguenti vantaggi nella programmazione:
- Riutilizzabilità del codice.
- Dimensioni del codice ridotte.
- Flusso di controllo semplice e intuitivo.
- Complessità ridotta.
Il diagramma sottostante mostra il bagnoping concetto.
Nel diagramma sopra, viene verificata la condizione del ciclo e, finché questa è soddisfatta, il blocco di esecuzione viene eseguito.
Ad ogni iterazione, la variabile contatore del ciclo, che determina la condizione del ciclo, deve cambiare per far uscire il controllo dal ciclo. In alcuni casi questo contatore incrementa o decrementa un valore predefinito, mentre in altri è una condizione di ricerca che continua a eseguire il blocco finché non viene soddisfatta.
Dichiarazioni di controllo del loop
Prima di apprendere il concetto di ciclo, è importante imparare le istruzioni di controllo del ciclo. Queste istruzioni controllano il flusso di esecuzione all'interno di un ciclo.
CONTINUA
Questa parola chiave indica al motore PL/SQL che, ogni volta che incontra CONTINUE all'interno di un ciclo, deve saltare il codice rimanente nel blocco di esecuzione e iniziare immediatamente l'iterazione successiva. Viene utilizzata principalmente quando il codice all'interno del ciclo deve essere saltato per determinati valori di iterazione.
ESCI / ESCI QUANDO
Questa parola chiave indica al motore PL/SQL di uscire immediatamente dal ciclo corrente. In un ciclo annidato, EXIT nel ciclo interno esce solo dal ciclo interno, non da quello esterno. 'EXIT WHEN' è seguito da un'espressione che restituisce un risultato booleano; se il risultato è TRUE, il controllo termina.
GOTO
Questa istruzione trasferisce il controllo a un'istruzione etichettata ("GOTO ;"). Presenta le seguenti restrizioni:
- Il trasferimento del controllo può essere effettuato solo all'interno dei sottoprogrammi.
- Il trasferimento del controllo non può avvenire dalla parte di gestione delle eccezioni alla parte di esecuzione.
L'utilizzo di questa dichiarazione non è raccomandato a meno che non ci siano alternative, perché il controllo del codice tracLa maneggevolezza diventa molto difficile quando il controllo viene trasferito da una parte all'altra.
Tipi di loop in PL/SQL
PL / SQL fornisce i seguenti tre tipi di cicli:
- Dichiarazione di ciclo di base
- Per l'istruzione del ciclo
- Dichiarazione del ciclo while
La tabella seguente mette a confronto i tre prima che il ciclo di base venga trattato in dettaglio.
| Ciclo continuo | Criteri di uscita | primi utilizzati quando |
|---|---|---|
| Ciclo base | Uscita esplicita nel blocco | L'uscita non si basa su un conteggio o una condizione fissa |
| Ciclo FOR | Il contatore raggiunge il limite della sua portata | Il numero di iterazioni è noto in anticipo |
| ciclo WHILE | La condizione diventa falsa | Il ciclo deve essere eseguito finché una condizione è valida |
Dichiarazione di ciclo di base
Questa è la struttura di ciclo più semplice in PL/SQL. Il blocco di esecuzione inizia con la parola chiave 'LOOP' e termina con 'END LOOP'. La condizione di uscita deve essere specificata all'interno del blocco di esecuzione in modo che il controllo esca dal ciclo, e la parola chiave EXIT deve essere specificata esplicitamente.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Spiegazione della sintassi:
- La parola chiave 'LOOP' indica l'inizio del ciclo e 'END LOOP' ne indica la fine.
- Il blocco di esecuzione contiene tutto il codice che deve essere eseguito, inclusa la condizione EXIT.
- La parte di esecuzione può contenere qualsiasi istruzione eseguibile.
Nota: Un'istruzione di ciclo di base senza la parola chiave EXIT è un ciclo infinito che non si arresta mai.
Esempio 1: In questo esempio, stampiamo i numeri da 1 a 5 utilizzando un semplice ciclo.
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 riga 2: Dichiarazione della variabile 'a' come 'NUMBER' e inizializzazione con il valore '1'.
- Code riga 4: Stampa del messaggio "Programma avviato".
- Code riga 5: La parola chiave 'LOOP' indica 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' indica la fine del blocco di esecuzione.
- Le righe da 6 a 8 continuano a essere eseguite finché 'a' non raggiunge 6, a quel punto la condizione restituisce TRUE e il controllo esce dal ciclo.
- Code riga 10: Stampa del messaggio "Programma completato".
Etichettatura dei loop
In PL/SQL, i cicli possono essere etichettati. L'etichetta deve essere racchiusa tra i simboli "<<" e ">>". Etichettare i cicli, soprattutto quelli annidati, migliora la leggibilità. L'etichetta può essere utilizzata nel comando EXIT per uscire da quel particolare ciclo, consentendo al sistema di uscire direttamente dal ciclo esterno di una struttura annidata tramite il comando EXIT seguito dall'etichetta del ciclo esterno.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <execution_block_ends> END LOOP;
Spiegazione della sintassi:
- L'anello esterno contiene al suo interno un altro anello.
- '< >' e '< >' sono le etichette di questi cicli.
Esempio 1: In questo esempio, stampiamo i numeri a partire da 1 utilizzando un semplice ciclo. Ogni numero viene stampato tante volte quanto il suo valore. Il limite superiore della serie è fissato nella parte di dichiarazione. Per ottenere questo risultato, utilizziamo il concetto di etichetta.
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 Spiegazione:
- Code righe 2-3: Dichiarazione delle variabili 'a' e 'b' come tipo di dati 'NUMBER'.
- Code riga 4: Dichiarazione della variabile 'upper_limit' come 'NUMBER' con valore '4'.
- Code riga 6: Stampa del messaggio "Programma avviato".
- Code riga 7: Il ciclo esterno è etichettato come "outer_loop".
- Code riga 9: Il valore di "a" viene incrementato di 1.
- Code riga 11: Il ciclo interno è etichettato come "inner_loop".
- Code riga 13: Condizione EXIT che verifica se 'a' è maggiore del valore 'upper_limit'. In caso contrario, prosegue; altrimenti esce 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 EXIT che verifica se 'b' è maggiore di 'a'. In tal caso, esce dal ciclo interno.
- Code riga 19: Stampa del messaggio "Programma completato".







