Обхват на PL/SQL променлива и вътрешен външен блок: вложена структура
⚡ Умно обобщение
Вложените блокове в PL/SQL поставят един блок в друг, което ви позволява да разделите сложната логика и да изолирате обработката на изключения. Разбирането на обхвата на променливите между външния и вътрешния блок и използването на етикети на блокове, запазва променливите с еднакви имена недвусмислени.

Какво е вложени блокове Oracle?
In PL / SQL, всеки блок може да бъде вложен в друг блок. Такъв блок се нарича вложен блок. Вложените блокове са много често срещани, когато искате да извършите определен процес, докато съхраняватеping кодът за този процес в отделен контейнер (блок).
Концепцията за вложени блокове помага на програмиста да подобри четимостта, като разделя сложната логика на отделни блокове и позволява на изключение за всеки блок, който ще се обработва вътре в главния външен блок.
Вложена блокова структура
Един блок може да бъде вложен в друг блок. Той може да бъде вложен или в частта за изпълнение, или в частта за обработка на изключения, като тези блокове могат да бъдат етикетирани. Един външен блок може да съдържа много вътрешни блокове. Всеки вътрешен блок е сам по себе си... 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;
- Синтаксисът по-горе показва вложения блок, който съдържа общо два блока.
- Тези блокове са обозначени като „външен_блок“ и „вътрешен_блок“.
Обхвати във вложен блок: Променлив обхват
Във вложен блок е необходимо ясно да разбирате обхвата и видимостта на всеки блок, преди да ги използвате. Особено във вътрешния блок, елементите както от външния, така и от вътрешния блок са видими, така че е необходимо правилно разбиране на това.
Точките по-долу обобщават обхватите във вложени блокове.
- Елементите, декларирани във външния блок, и стойността, дефинирана преди дефиницията на вътрешния блок, са видими във вътрешния блок.
- Елементите, декларирани във вътрешния блок, не са видими във външния блок. Те са видими само във вътрешния блок.
- Външният блок и вътрешният блок могат да имат променлив със същото име.
- В случай на променливи с едно и също име, вътрешният блок по подразбиране се отнася само до променливата, декларирана във вътрешния блок.
- Ако вътрешният блок иска да се обърне към външната блокова променлива, която има същото име като променливата на вътрешния блок, тогава външният блок трябва да бъде ЕТИКЕТИРАН, а външната блокова променлива може да бъде обозначена като ' . '.
Примерът по-долу ви помага да разберете повече за тези обхвати.
Пример 1: В този пример виждаме обхвата на променливите във вътрешния и външния блок. Виждаме също как да се обърнем към променливите, използвайки етикет на блок.
Снимката на екрана по-долу показва Пример 1, където вътрешният блок се отнася до променлива на външен блок, използвайки етикета на блока.
<<OUTER_BLOCK>> DECLARE var1 VARCHAR2(30):='outer_block'; var2 VARCHAR2(30):='value before inner block'; BEGIN <<INNER_BLOCK>> DECLARE var1 VARCHAR2(30):='inner_block'; BEGIN dbms_output.put_line(var1); dbms_output.put_line(OUTER_BLOCK.var1); dbms_output.put_line(var2); END; var2:='value after inner block'; END; /
Code Обяснение:
- Code ред 1: Етикетиране на външния блок като „OUTER_BLOCK“.
- Code ред 3: Деклариране на променлива 'var1' като VARCHAR2(30) с начална стойност „outer_block“.
- Code ред 4: Деклариране на променлива 'var2' като VARCHAR2(30) с начална стойност „стойност преди вътрешния блок“.
- Code ред 6: Етикетиране на вътрешния блок като „INNER_BLOCK“.
- Code ред 8: Деклариране на променлива 'var1' във вътрешния блок като VARCHAR2(30) с начална стойност „inner_block“.
- Code ред 10: Отпечатване на стойността на 'var1'. Тъй като не е посочен етикет, по подразбиране се взема стойността от вътрешния блок, следователно се отпечатва съобщението 'inner_block'.
- Code ред 11: Отпечатване на стойността на външната блокова променлива 'var1'. Тъй като вътрешният блок има променлива със същото име, ние се обръщаме към етикета на външния блок. По този начин се отпечатва съобщението 'outer_block'.
- Code ред 12: Отпечатване на стойността на външната блокова променлива „var2“. Тъй като във вътрешния блок няма променлива с това име, по подразбиране тя взема стойността от външния блок, следователно отпечатва съобщението „стойност преди вътрешния блок“.
- На променливата „var2“ във външния блок е присвоена стойността „стойност след вътрешния блок“. Но това присвояване се случва след дефиницията на вътрешния блок, така че тази стойност не присъства във вътрешния блок.
Пример 2: В този пример намираме разликата между две числа, едното декларирано във външния блок, а другото във вътрешния блок. И двете имат едно и също име. Нека видим как етикетът на блока е полезен при позоваване на тези променливи.
Снимката на екрана по-долу показва Пример 2, който изчислява разликата между външните и вътрешните променливи на блока със същото име.
<<OUTER_BLOCK>> DECLARE ln_val NUMBER :=5; BEGIN <<INNER_BLOCK>> 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' от външния и вътрешния блок. Функцията „ . „Форматът ” се използва за обозначаване на тези променливи, за да се избегнат конфликти, дължащи се на едно и също име на променлива.




