Область змінної 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' із зовнішнього та внутрішнього блоку. " . ” формат використовується для посилання на ці змінні, щоб уникнути конфліктів через те саме ім’я змінної.
Резюме
У цьому посібнику ми дізналися, як створити вкладений блок і як керувати областю у внутрішньому блоці та зовнішніх блоках. Ми також бачили приклад, коли змінні з внутрішнього та зовнішнього блоку посилалися на внутрішній блок.




