PL / SQL змінний обсяг & Внутрішній зовнішній блок: вкладена структура

Зміст:

Anonim

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

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

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

У цьому підручнику ви дізнаєтесь-

  • Структура вкладеного блоку
  • Області вкладеного блоку: змінний обсяг

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

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

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

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

<>DECLAREBEGIN<>DECLAREBEGIN.EXCEPTIONEND;EXCEPTIONEND;
  • Вищезазначений синтаксис показує вкладений блок, який містить загалом два блоки.
  • Ці блоки позначені як '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' із зовнішнього та внутрішнього блоку. Формат "<ім'я_блоку>. <Ім'я_змінної>" використовується для посилання на ці змінні, щоб уникнути конфліктів через те саме ім'я змінної.

Резюме

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