Область змінної PL/SQL і внутрішній зовнішній блок: вкладена структура

Що таке вкладені блоки Oracle?

У PL/SQL кожен блок може бути вкладений в інший блок. Вони називаються вкладеним блоком. Вкладені блоки дуже поширені, коли ми хочемо виконати певний процес, і в той же час код для цього процесу повинен зберігатися в окремому контейнері (блоці).

Концепція вкладеного блоку допоможе програмісту покращити читабельність, відокремлюючи складні речі в кожному блоці та обробляючи винятки для кожного блоку всередині основного зовнішнього блоку.

Вкладена блочна структура

Блок може бути вкладений в інший блок. Це може бути вкладено або в частину виконання, або в обробка винятків частина. Ці блоки також можуть бути позначені. Один зовнішній блок може містити багато внутрішніх блоків. Кожен внутрішній блок знову є a Блок PL/SQL, тому всі властивості та характеристики внутрішнього блоку будуть такими ж, як і зовнішнього блоку. На зображенні нижче показано графічне представлення вкладеної блочної структури. Батьківський блок є основним блоком, а дочірній блок є вкладеним блоком.

Вкладена блочна структура

Нижче наведено синтаксис для вкладеного блоку.

Вкладена блочна структура

Синтаксис вкладеного блоку

<<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;
  • Наведений вище синтаксис показує вкладений блок, який містить загалом два блоки.
  • Ці блоки позначаються як "outer_block" і "inner_block"

Області у вкладеному блоці: область змінної

У вкладеному блоці потрібно чітко розуміти область і видимість кожного блоку перед їх використанням. Зокрема, у внутрішньому блоці будуть видні елементи як зовнішнього, так і внутрішнього блоку, тому це необхідно правильно розуміти.

Нижче наведено додаткові відомості щодо областей у вкладених блоках.

  • Елементи, оголошені у зовнішньому блоці, і значення, визначене перед визначенням внутрішнього блоку, видно всередині внутрішнього блоку.
  • Елементи, оголошені у внутрішньому блоці, не видно у зовнішньому блоці. Їх видно лише всередині внутрішнього блоку.
  • Зовнішній і внутрішній блоки можуть мати змінну з однаковим іменем.
  • У випадку змінних із однаковою назвою внутрішній блок за замовчуванням посилатиметься лише на змінну, оголошену у внутрішньому блоці.
  • Якщо внутрішній блок хоче посилатися на змінну зовнішнього блоку, яка має те саме ім’я, що й у внутрішнього блоку, тоді зовнішній блок має бути ПОЗНАЧЕНО, а змінна зовнішнього блоку може мати посилання як ' . '

Наведений нижче приклад допоможе краще зрозуміти ці області.

Приклад 1: у цьому прикладі ми побачимо область змінних у внутрішньому та зовнішньому блоці. Крім того, ми побачимо, як посилатися на змінні за допомогою мітки блоку.

Області у вкладеному блоці

<<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 Пояснення:

  • Code лінія 1: Позначення зовнішнього блоку як «OUTER_BLOCK».
  • Code лінія 3: оголошення змінної 'var1' як VARCHAR2 (30) з початковим значенням «зовнішнього блоку».
  • Code лінія 4: Оголошення змінної 'var2' як VARCHAR2 (30) з початковим значенням «значення перед внутрішнім блоком».
  • Code рядок 6: Позначення внутрішнього блоку як «INNER_BLOCK»
  • Code рядок 8: Оголошення змінної "var1" у внутрішньому блоці як VARCHAR2 (30) з початковим значенням "внутрішній блок".
  • Code рядок 10: Друк значення 'var1'. Оскільки за замовчуванням жодна мітка не згадується, вона братиме значення із внутрішнього блоку, отже друкуватиме повідомлення «inner_block».
  • Code рядок 11: Друк значення змінної зовнішнього блоку 'var1'. Оскільки внутрішній блок містить змінну з тим самим іменем, нам потрібно звернутися до мітки зовнішнього блоку. Таким чином друкується повідомлення «зовнішній блок».
  • Code рядок 12: Друк значення змінної зовнішнього блоку 'var2'. Оскільки у внутрішньому блоці немає змінної з такою назвою, за замовчуванням вона братиме значення із зовнішнього блоку, отже друкуватиме повідомлення «значення перед внутрішнім блоком».
  • Змінній "var2" у зовнішньому блоці присвоєно значення "значення після внутрішнього блоку". Але це призначення відбулося після визначення внутрішнього блоку. Тому цього значення немає у внутрішньому блоці.

Приклад 2: у цьому прикладі ми збираємося знайти різницю між двома числами, одне оголошене у зовнішньому блоці, а інше – у внутрішньому блоці. Обидва будуть мати однакові назви. Давайте подивимося, як мітка блоку корисна для посилання на ці змінні.

Області у вкладеному блоці

<<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 Пояснення:

  • Code лінія 1: Позначення зовнішнього блоку як «OUTER_BLOCK».
  • Code лінія 3: Оголошення змінної 'ln_val' як NUMBER з початковим значенням “5”.
  • Code рядок 5: Позначення внутрішнього блоку як «INNER_BLOCK»
  • Code рядок 7: Оголошення змінної 'ln_val' у внутрішньому блоці як NUMBER з початковим значенням “3”.
  • Code рядок 9: Друк різниці в значенні 'ln_val' із зовнішнього та внутрішнього блоку. " . ” формат використовується для посилання на ці змінні, щоб уникнути конфліктів через те саме ім’я змінної.

Резюме

У цьому посібнику ми дізналися, як створити вкладений блок і як керувати областю у внутрішньому блоці та зовнішніх блоках. Ми також бачили приклад, коли змінні з внутрішнього та зовнішнього блоку посилалися на внутрішній блок.

Підсумуйте цей пост за допомогою: