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 seguente mostra il concetto di loop in modo pittorico

Oracle CICLO PL/SQL

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 istruzione non è consigliato a meno che non vi 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

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.

Dichiarazione di ciclo di base

 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.

Dichiarazione di ciclo di base

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:
/

Spiegazione del codice:

  • Riga di codice 2: Dichiarare la variabile "a" come tipo di dati "NUMERO" e inizializzarla con il valore "1".
  • Riga di codice 4: Stampa della scritta “Programma avviato”.
  • Riga di codice 5: La parola chiave "LOOP" segna 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' 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.
  • Riga di codice 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.

Etichettatura dei loop

<<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

Etichettatura dei loopEtichettatura dei loop

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;
/

Spiegazione del codice:

  • Riga di codice 2-3: Dichiarando le variabili 'a' e 'b' come tipo di dati 'NUMERO'.
  • Riga di codice 4: Dichiarando la variabile 'upper_limit' come tipo di dati 'NUMBER' con valore '4'
  • Riga di codice 6: Stampa della scritta “Programma avviato”.
  • Riga di codice 7: Il ciclo esterno è stato etichettato come “outer_loop”
  • Riga di codice 9: Il valore di "a" viene incrementato di 1.
  • Riga di codice 11: Il ciclo interno è stato etichettato come "inner_loop".
  • Riga di codice 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.
  • 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 di USCITA che controlla se il valore di 'b' è maggiore di 'a'. Se è così, uscirà dal controllo dal ciclo interno.
  • Riga di codice 14: Stampa della dicitura “Programma completato”

Sommario

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.