L'istruzione RETURN termina l'elaborazione. Le operazioni che vengono eseguite successivamente dipendono dal contesto di programmazione in cui viene eseguita l'istruzione RETURN.
Quando viene utilizzata in una funzione, l'istruzione RETURN termina l'elaborazione di tale funzione e restituisce il controllo all'espressione chiamante. L'espressione expression (che deve essere presente) viene valutata e funziona come valore di ritorno della funzione. E' un errore per una funzione restituire il controllo uscendo dall'elenco delle istruzioni. Il tipo di dati del valore restituito deve essere uguale a quello nella dichiarazione della funzione.
Quando viene utilizzata in una procedura, l'istruzione RETURN termina l'elaborazione di tale procedura e restituisce il controllo all'istruzione CALL chiamante. Un'istruzione RETURN utilizzata all'interno di una procedura non deve avere una espressione (expression).
Quando viene utilizzata nel codice principale di un nodo Filter, Compute o Database, l'istruzione RETURN termina l'elaborazione del codice ESQL del nodo e passa il controllo al nodo successivo. In tali casi, se è presente expression, deve essere valutata in un valore BOOLEAN. Se expression non è presente, un nodo Filter suppone un valore UNKNOWN ed esegue la propagazione al proprio terminale unknown; i nodi Compute e Database eseguono la propagazione ai propri terminali out.
Valore di ritorno | Risultato | |
Nodo Compute: | ||
RETURN | TRUE | Propaga il messaggio al terminale out. |
FALSE | Non esegue la propagazione. | |
UNKNOWN | Non esegue la propagazione. | |
RETURN; | Propaga il messaggio al terminale out. | |
Nodo Filter: | ||
RETURN | TRUE | Propaga il messaggio al terminale true. |
FALSE | Propaga il messaggio al terminale false. | |
UNKNOWN | Propaga il messaggio al terminale unknown. | |
RETURN; | Propaga il messaggio al terminale unknown. | |
Nodo Database: | ||
RETURN | TRUE | Propaga il messaggio al terminale out. |
FALSE | Non esegue la propagazione. | |
UNKNOWN | Non esegue la propagazione. | |
RETURN; | Propaga il messaggio al terminale out. |
-- Declare variables -- DECLARE a INT; DECLARE PriceTotal FLOAT; DECLARE NumItems INT; -- Initialize values -- SET a = 1; SET NumItems = 0; SET PriceTotal = 0.0; -- Calculate value of order, however if this is a bulk purchase, the -- -- order will need to be handled differently (discount given) so return TRUE -- -- or FALSE depending on the size of the order -- WHILE a <= CARDINALITY(Invoice.Purchases.Item[a] DO SET NumItems = NumItems + Invoice.Purchases.Item[a].Quantity; SET PriceTotal = PriceTotal + Invoice.Purchases.Item[a].UnitPrice; SET a = a + 1; END; RETURN PriceTotal/NumItems > 42;Se il prezzo medio degli articoli è maggiore di 42, viene restituito TRUE; in caso contrario, viene restituito FALSE. Quindi, un nodo Filter non può instradare messaggi che descrivono articoli costosi in un percorso diverso dai messaggi che descrivono articoli economici.
Consultare Istruzione PROPAGATE per un esempio di RETURN FALSE per evitare la propagazione implicita al termine dell'elaborazione in un nodo Compute.