[Oracle] PL/SQL: Utilizzo delle LABEL

Rispondi
Roberto
Amministratore
Messaggi: 161
Iscritto il: 19/12/2009, 19:30

[Oracle] PL/SQL: Utilizzo delle LABEL

Messaggio da Roberto »

In PL/SQL è possibile assegnare delle "Label" a blocchi di codice in modo tale da poter creare dei riferimenti ad essi all'interno dei programmi. Una label dunque non è altro che un identificatore che può essere usato per descrivere qualcosa o per fare riferimento a variabili all'interno dei blocchi. Vediamo il seguente esempio:

Codice: Seleziona tutto

<<blocco_esterno>>
DECLARE
    contatore NUMBER := 0;
    manager NUMBER := &id_manager_corrente;
BEGIN
    SELECT COUNT(*)
    INTO contatore
    FROM area
    WHERE id_manager = blocco_esterno.manager;
    
    IF contatore > 0 THEN
    	<<blocco_interno>>
        DECLARE
            nome_area VARCHAR2(64);
            manager NUMBER := &id_manager_new;
        BEGIN            
            SELECT nome
            INTO nome_area
            FROM area
            WHERE id_manager = blocco_esterno.manager;
            DBMS_OUTPUT.PUT_LINE('A questo manager e associata l area: ' || nome_area);
            
            UPDATE AREA
            SET ID_MANAGER = blocco_interno.manager
            WHERE ID_MANAGER = blocco_esterno.manager;
            commit;
            DBMS_OUTPUT.PUT_LINE('Questa area adesso ha un nuovo manager ID#' || blocco_interno.manager);
        END blocco_interno;
    ELSE
        DBMS_OUTPUT.PUT_LINE('Non ci sono aree associate a questo manager');
    END IF;
    EXCEPTION
    	WHEN NO_DATA_FOUND THEN
    	DBMS_OUTPUT.PUT_LINE('Non ci sono aree associate a questo manager');
END blocco_esterno;
In questo esempio si assume che un'Area aziendale abbia associato un manager, pertanto vogliamo cercare tutte le aree che afferiscono ad un manager passato in input tramite ID e assegnargli un nuovo manager passato sempre in input. Come è possibile notare abbiamo utilizzato due blocchi innestati tra di loro ed entrambi utilizzano lo stesso nome di variabile per riferirsi all'ID del nuovo e del vecchio manager. Durante l'update siamo in grado di distinguere i due dati proprio grazie alle label:

Codice: Seleziona tutto

SET ID_MANAGER = blocco_interno.manager
WHERE ID_MANAGER = blocco_esterno.manager;
Roberto Basile
Rispondi