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.

Struttura a blocchi nidificati

Di seguito รจ riportata la sintassi per il blocco nidificato.

Struttura a blocchi nidificati

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.

Ambiti nel blocco annidato

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

Ambiti nel blocco annidato

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

Riassumi questo post con: