Ambito variabile PL/SQL e blocco esterno interno: struttura nidificata
Che cosa sono i blocchi nidificati Oracle?
In PL/SQL, ogni blocco puรฒ essere annidato in un altro blocco. Sono indicati come blocchi nidificati. I blocchi nidificati sono molto comuni quando vogliamo eseguire un determinato processo e, allo stesso tempo, il codice per questi processi dovrebbe essere conservato in un contenitore separato (blocco).
Il concetto di blocco nidificato aiuterร il programmatore a migliorare la leggibilitร separando gli elementi complessi in ogni blocco e a gestire l'eccezione per ogni blocco all'interno del blocco esterno principale.
Struttura a blocchi nidificati
Un blocco puรฒ essere annidato in un altro blocco. Questo puรฒ essere annidato nella parte di esecuzione o nel file la gestione delle eccezioni parte. Questi blocchi possono anche essere etichettati. Un blocco esterno puรฒ contenere molti blocchi interni. Ogni blocco interno รจ ancora una volta a Blocco PL/SQL, quindi tutte le proprietร e le caratteristiche del blocco interno saranno le stesse del blocco esterno. L'immagine seguente fornisce la rappresentazione pittorica della struttura a blocchi nidificati. Il blocco genitore รจ il blocco principale e il blocco figlio รจ il blocco nidificato.
Di seguito รจ riportata la sintassi per il blocco nidificato.
Sintassi dei blocchi nidificati
<<outer_block>> DECLARE <Declarative section> BEGIN <Execution part for outer block begins> <<inner block>> DECLARE <Declarative section> BEGIN <Execution part for inner block>. EXCEPTION <Exception handling part> END; <Execution part for outer block begins> EXCEPTION <Exception handling part> END;
- La sintassi precedente mostra il blocco nidificato che contiene un totale di due blocchi.
- Questi blocchi sono etichettati come "blocco_esterno" e "blocco_interno"
Ambiti nel blocco annidato: ambito variabile
Nel blocco nidificato, รจ necessario comprendere chiaramente l'ambito e la visibilitร di ciascun blocco prima di utilizzarlo. In particolare nel blocco interno, saranno visibili gli elementi sia del blocco esterno che di quello interno, quindi รจ necessaria una corretta comprensione di ciรฒ.
I punti seguenti riassumeranno maggiormente gli ambiti nei blocchi nidificati.
- Gli elementi dichiarati nel blocco esterno e il valore definito prima della definizione del blocco interno sono visibili all'interno del blocco interno.
- Gli elementi dichiarati nel blocco interno non sono visibili nel blocco esterno. Sono visibili solo all'interno del blocco interno.
- Il blocco esterno e il blocco interno possono avere una variabile con lo stesso nome.
- In caso di variabili con lo stesso nome, blocco interno per impostazione predefinita, farร riferimento solo alla variabile dichiarata nel blocco interno.
- Se il blocco interno vuole fare riferimento alla variabile del blocco esterno che ha lo stesso nome di quella del blocco interno, allora il blocco esterno dovrebbe essere ETICHETTATO e la variabile del blocco esterno puรฒ essere definita come ' . '
L'esempio seguente aiuterร a comprendere meglio questi ambiti.
esempio 1: In questo esempio, vedremo l'ambito delle variabili nel blocco interno ed esterno. Inoltre, vedremo come fare riferimento alle variabili utilizzando l'etichetta del blocco.
<<OUTER_BLOC>> DECLARE varl VARCHAR2(30):='outer_block'; var2 VARCHAR2(30):='value before inner blockโ; BEGIN <<NNER_BLOCK>> DECLARE varl VARCHAR2(30):='inner_block'; BEGIN dbms_output.put_line(varl), โญ โฌ dbms_output.put_line(OUTER_BLOCKvar1); dbms_output.put_line(var2); END; var2:='value after inner block'; END; /
Code Spiegazione:
- Code Linea 1: Etichettatura del blocco esterno come โOUTER_BLOCKโ.
- Code Linea 3: Dichiarare una variabile 'var1' come VARCHAR2 (30) con il valore iniziale di "blocco esterno".
- Code Linea 4: Dichiarare una variabile 'var2' come VARCHAR2 (30) con il valore iniziale di "valore prima del blocco interno".
- Code riga 6: Etichettare il blocco interno come โINNER_BLOCKโ
- Code riga 8: Dichiarare una variabile 'var1' nel blocco interno come VARCHAR2 (30) con il valore iniziale di "blocco interno".
- Code riga 10: Stampa del valore di 'var1'. Poichรฉ per impostazione predefinita non viene menzionata alcuna etichetta, prenderร il valore da un blocco interno, quindi stamperร il messaggio 'inner_block'.
- Code riga 11: Stampa del valore della variabile del blocco esterno 'var1'. Poichรฉ il blocco interno ha la variabile con lo stesso nome, dobbiamo fare riferimento all'etichetta del blocco esterno. Stampando cosรฌ il messaggio "blocco esterno".
- Code riga 12: Stampa del valore della variabile del blocco esterno 'var2'. Poichรฉ non รจ presente alcuna variabile con questo nome nel blocco interno, per impostazione predefinita prenderร il valore da un blocco esterno, quindi stamperร il messaggio "valore prima del blocco interno".
- Alla variabile 'var2' nel blocco esterno รจ stato assegnato il valore 'valore dopo il blocco interno'. Ma questa assegnazione รจ avvenuta dopo la definizione di un blocco interno. Quindi questo valore non รจ presente nel blocco interno.
esempio 2: In questo esempio, troveremo la differenza tra due numeri, uno dichiarato nel blocco esterno e un altro nel blocco interno. Entrambi avranno lo stesso nome. Vediamo come l'etichetta del blocco รจ utile nel riferire queste variabili.
<<OUTER_BLOC>> DECLARE ln_val NUMBER :=5; BEGIN <<INNERBLOC>> DECLARE ln_val NUMBER :=3; BEGIN dbms_output.put_line(The difference between outer block and inner block variable is:'||' outer_block. ln_val-inner_block.ln_val); END; END; /
Code Spiegazione:
- Code Linea 1: Etichettatura del blocco esterno come โOUTER_BLOCKโ.
- Code Linea 3: Dichiarare una variabile 'ln_val' come NUMERO con il valore iniziale di "5".
- Code riga 5: Etichettare il blocco interno come โINNER_BLOCKโ
- Code riga 7: Dichiarare una variabile 'ln_val' nel blocco interno come NUMERO con il valore iniziale di "3".
- Code riga 9: Stampa della differenza di valore di 'ln_val' tra il blocco esterno e quello interno. IL " . Il formato " viene utilizzato per fare riferimento a queste variabili per evitare conflitti dovuti allo stesso nome di variabile.
Sintesi
In questo tutorial abbiamo imparato come creare un blocco nidificato e come gestire l'ambito nel blocco interno e nei blocchi esterni. Abbiamo anche visto un esempio in cui le variabili del blocco interno ed esterno venivano riferite all'interno del blocco interno.




