Controllo iterativo

Con le istruzioni LOOP, WHILE, FOR ed EXIT è possibile controllare il flusso di esecuzione del programma NZPLSQL in modo iterativo.

Istruzione LOOP

L'istruzione LOOP definisce un ciclo incondizionato che si ripete finché non viene terminato da un'istruzione EXIT o da un'istruzione RETURN (che termina la procedura e il ciclo). La sintassi è la seguente:
[<<label>>]
LOOP
    statements
END LOOP;

L'etichetta opzionale può essere utilizzata dalle istruzioni EXIT dei cicli annidati per specificare quale livello di annidamento viene terminato.

Dichiarazione EXIT

L'istruzione EXIT termina un ciclo. La sintassi è la seguente:
EXIT [ label ] [ WHEN expression ];

Se non si specifica un'etichetta, il ciclo più interno viene terminato e l'istruzione successiva a END LOOP viene eseguita. Se si specifica un'etichetta, questa deve essere l'etichetta del ciclo o del blocco corrente o di un livello superiore. A questo punto, il ciclo o il blocco chiamato viene terminato e il controllo continua con l'istruzione dopo il corrispondente END del ciclo o dei blocchi.

Esempi:
LOOP
-- some computations
IF count > 0 THEN
EXIT; -- exit loop
END IF;
END LOOP;

LOOP
-- some computations
EXIT WHEN count > 0;
END LOOP;

BEGIN
-- some computations
IF stocks > 100000 THEN
EXIT; 
END IF;
END;

Istruzione WHILE

Con l'istruzione WHILE è possibile eseguire il loop di una sequenza di istruzioni se la valutazione dell'espressione di condizione è vera.
[<<label>>]
WHILE expression LOOP
statements
END LOOP;
Ad esempio:
WHILE amount_owed > 0 AND gift_certificate_balance > 0 LOOP
-- some computations here
END LOOP;

WHILE NOT boolean_expression LOOP
-- some computations here
END LOOP;

Istruzione FOR

Utilizzando l'istruzione FOR, è possibile creare un ciclo che itera su un intervallo di valori interi.
[<<label>>]
FOR name IN [ REVERSE ] expression .. expression LOOP
statements
END LOOP;

Il nome della variabile viene creato automaticamente come tipo intero ed esiste solo all'interno del ciclo. Le due espressioni per il limite inferiore e superiore dell'intervallo vengono valutate solo quando si entra nel ciclo. Il passo di iterazione è sempre 1.

Alcuni esempi di cicli FOR:
FOR i IN 1 .. 10 LOOP
-- some expressions here
RAISE NOTICE 'i is %',i;
END LOOP;

FOR i IN REVERSE 10 .. 1 LOOP
-- some expressions here
END LOOP;