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

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

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

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.

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

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.

Riassumi questo post con: