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.

  • 🔁 Scopo: Un ciclo esegue un blocco di codice molte volte, riducendo le dimensioni e la complessità del codice.
  • 🧭 Contatore del ciclo: Una variabile contatore determina la condizione del ciclo e deve cambiare affinché il ciclo possa terminare.
  • ⏭️ CONTINUA: Salta la parte restante dell'iterazione corrente e inizia la successiva.
  • 🚪 USCITA / USCITA QUANDO: Esce immediatamente dal ciclo, facoltativamente quando una condizione booleana è vera.
  • 🏷️ etichette: Un'etichetta di ciclo tra doppie parentesi angolari consente a EXIT di indirizzare un ciclo esterno.
  • ️ Ciclo base: Il programma continua a funzionare finché non viene raggiunto un segnale EXIT esplicito; senza di esso, entra in un ciclo infinito.
  • 🧩 Tre tipi: I cicli base, il ciclo FOR e il ciclo WHILE rappresentano gli schemi più comuni.

Oracle Ciclo PL/SQL

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.

gabinettoping Diagramma di flusso concettuale in PL/SQL

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:

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.

Struttura di base dei cicli in PL/SQL

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.

Stampa ciclica di base dei numeri da 1 a 5

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.

Struttura ad anello annidato etichettata

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

Esempio di ciclo etichettato, parte 1Esempio di ciclo etichettato, parte 2

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

DOMANDE FREQUENTI

EXIT esce dal ciclo incondizionatamente. EXIT WHEN lo esce solo quando la seguente espressione booleana è vera, eliminando la necessità di un IF separato attorno a un semplice EXIT.

Un'etichetta consente a un'uscita in un ciclo interno di uscire da un ciclo esterno denominato in un solo passaggio. Rende inoltre il codice annidato molto più facile da leggere rispetto a tracistruzioni END LOOP.

Se il blocco non ha un'uscita (EXIT) o se il contatore non raggiunge mai la condizione di uscita, il ciclo non si arresta mai. Assicurarsi sempre che il contatore aumenti fino a raggiungere la condizione EXIT WHEN.

Spesso sì. L'IA può trace se il contatore si muove verso la condizione EXIT e avvisa quando un ciclo non ha un'uscita raggiungibile, anche se un'uscita dipendente dai dati necessita comunque di un'esecuzione di prova per essere confermata.

L'istruzione CONTINUE salta la parte restante dell'iterazione corrente e passa direttamente alla successiva. È utile quando determinati valori devono essere ignorati senza uscire completamente dal ciclo.

Riassumi questo post con: