Що таке вкладені блоки Oracle?
У PL / SQL кожен блок може бути вкладений в інший блок. Вони називаються вкладеними блоками. Вкладені блоки є дуже поширеними, коли ми хочемо виконати певний процес, і в той же час код для цього процесу повинен зберігатися в окремому контейнері (блоці).
Концепція вкладеного блоку допоможе програмісту поліпшити читабельність, відокремлюючи складні речі в кожному блоці та обробляючи винятки для кожного блоку всередині основного зовнішнього блоку.
У цьому підручнику ви дізнаєтесь-
- Структура вкладеного блоку
- Області вкладеного блоку: змінний обсяг
Структура вкладеного блоку
Блок можна вкласти в інший блок. Це може бути вкладене або у частину виконання, або в частину обробки винятків. Ці блоки також можуть бути позначені. Один зовнішній блок може містити багато внутрішніх блоків. Кожен внутрішній блок знову є блоком PL / SQL, отже всі властивості та характеристики внутрішнього блоку будуть однаковими з зовнішнім блоком. Наведене нижче зображення дає зображальне зображення вкладеної структури блоків. Батьківський блок - це основний блок, а дочірній - вкладений.
Нижче наведено синтаксис вкладеного блоку.
Синтаксис вкладеного блоку
<>DECLARE BEGIN < >DECLARE BEGIN .EXCEPTION END; EXCEPTION END;
- Вищезазначений синтаксис показує вкладений блок, який містить загалом два блоки.
- Ці блоки позначені як 'external_block' та 'inner_block'
Області вкладеного блоку: змінний обсяг
У вкладеному блоці потрібно чітко розуміти обсяг і видимість кожного блоку, перш ніж використовувати їх. Зокрема у внутрішньому блоці будуть видно елементи як із зовнішнього, так і з внутрішнього блоку, отже, необхідне належне розуміння цього.
Нижче в пунктах буде підсумовано більше про сфери вкладених блоків.
- Елементи, заявлені у зовнішньому блоці, і значення, яке визначено перед визначенням внутрішнього блоку, видно всередині внутрішнього блоку.
- Елементи, заявлені у внутрішньому блоці, не видно у зовнішньому блоці. Вони видно лише всередині внутрішнього блоку.
- Зовнішній блок і Внутрішній блок можуть мати змінну з однаковою назвою.
- У випадку змінних з тим самим іменем внутрішній блок за замовчуванням буде посилатися на змінну, оголошену лише у внутрішньому блоці.
- Якщо внутрішній блок хоче посилатися на зовнішню змінну блоку, яка має те саме ім'я, що і на внутрішній блок, тоді зовнішній блок повинен бути ПОЗНАЧЕНИМ, а зовнішня змінна блоку може бути позначена як '
. '
Наведений нижче приклад допоможе зрозуміти більше про ці сфери.
Приклад 1 : У цьому прикладі ми побачимо область змінних у внутрішньому та зовнішньому блоці. Крім того, ми побачимо, як посилатися на змінні, використовуючи мітку блоку.
<>DECLAREvarl VARCHAR2(30):='outer_block';var2 VARCHAR2(30):='value before inner block’;BEGIN< >DECLAREvarl VARCHAR2(30):='inner_block';BEGINdbms_output.put_line(varl), dbms_output.put_line(OUTER_BLOCKvar1);dbms_output.put_line(var2);END;var2:='value after inner block';END;/
Пояснення коду:
- Рядок коду 1 : Позначення зовнішнього блоку як "OUTER_BLOCK".
- Рядок коду 3 : Оголошення змінної 'var1' як VARCHAR2 (30) з початковим значенням "зовнішнього блоку".
- Рядок коду 4 : Оголошення змінної 'var2' як VARCHAR2 (30) з початковим значенням "значення перед внутрішнім блоком".
- Рядок коду 6: Позначення внутрішнього блоку як "INNER_BLOCK"
- Кодовий рядок 8: Оголошення змінної 'var1' у внутрішньому блоці як VARCHAR2 (30) з початковим значенням "внутрішній блок".
- Рядок коду 10: Друк значення 'var1'. Оскільки за замовчуванням жодна мітка не згадується, вона буде приймати значення з внутрішнього блоку, отже, друкуватиме повідомлення "inner_block".
- Рядок коду 11: Друк значення зовнішньої змінної блоку 'var1'. Оскільки внутрішній блок має змінну з тим самим іменем, нам потрібно звернутися до мітки зовнішнього блоку. Таким чином друкується повідомлення "зовнішній блок".
- Рядок коду 12: Друк значення зовнішньої змінної блоку 'var2'. Оскільки у внутрішньому блоці немає змінної з цим іменем, за замовчуванням воно буде приймати значення із зовнішнього блоку, отже, друкуватиме повідомлення "value before internal block".
- Змінній 'var2' у зовнішньому блоці присвоєно значення 'значення після внутрішнього блоку'. Але це призначення відбулося після визначення внутрішнього блоку. Отже, цього значення немає у внутрішньому блоці.
Приклад 2 : У цьому прикладі ми збираємося знайти різницю між двома числами, одним оголошеним у зовнішньому блоці, а іншим у внутрішньому блоці. Обидва будуть мати однакову назву. Давайте подивимося, як мітка блоку корисна для посилання на ці змінні.
<>DECLAREln_val NUMBER :=5;BEGIN< >DECLAREln_val NUMBER :=3;BEGINdbms_output.put_line(The difference between outer block and inner block variable is:'||' outer_block. ln_val-inner_block.ln_val);END;END;/
Пояснення коду:
- Рядок коду 1 : Позначення зовнішнього блоку як "OUTER_BLOCK".
- Рядок коду 3 : Оголошення змінної 'ln_val' як НОМЕР із початковим значенням "5".
- Рядок коду 5: Позначення внутрішнього блоку як "INNER_BLOCK"
- Рядок коду 7: Оголошення змінної 'ln_val' у внутрішньому блоці як НОМЕР із початковим значенням "3".
- Рядок коду 9: Друк різниці у значенні 'ln_val' із зовнішнього та внутрішнього блоку. Формат "<ім'я_блоку>. <Ім'я_змінної>" використовується для посилання на ці змінні, щоб уникнути конфліктів через те саме ім'я змінної.
Резюме
У цьому підручнику ми дізналися, як створити вкладений блок і як обробляти область дії у внутрішньому блоці та зовнішніх блоках. Ми також бачили приклад, коли змінні з внутрішнього та зовнішнього блоку посилалися всередині внутрішнього блоку.