Zmienny zakres PL/SQL i wewnętrzny blok zewnętrzny: struktura zagnieżdżona
Co to są bloki zagnieżdżone Oracle?
W PL/SQL każdy blok można zagnieździć w innym bloku. Nazywa się je blokiem zagnieżdżonym. Bloki zagnieżdżone są bardzo powszechne, gdy chcemy wykonać określony proces, a jednocześnie kod tych procesów powinien być przechowywany w osobnym kontenerze (bloku).
Koncepcja zagnieżdżonych bloków pomoże programistom poprawić czytelność poprzez oddzielenie złożonych elementów w każdym bloku i obsługę wyjątków dla każdego bloku wewnątrz głównego bloku zewnętrznego.
Zagnieżdżona struktura blokowa
Blok można zagnieździć w innym bloku. Można to zagnieździć w części wykonawczej lub w Obsługa wyjątków część. Bloki te można również oznaczyć. Jeden blok zewnętrzny może zawierać wiele bloków wewnętrznych. Każdy blok wewnętrzny jest ponownie a Blok PL/SQL, stąd wszystkie właściwości i cechy bloku wewnętrznego będą takie same, jak bloku zewnętrznego. Poniższy obraz przedstawia obrazową reprezentację struktury zagnieżdżonych bloków. Blok nadrzędny jest blokiem głównym, a blok podrzędny jest blokiem zagnieżdżonym.
Poniżej znajduje się składnia zagnieżdżonego bloku.
Składnia zagnieżdżonego bloku
<<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;
- Powyższa składnia przedstawia zagnieżdżony blok, który zawiera w sumie dwa bloki.
- Bloki te są oznaczone jako „zewnętrzny_blok” i „wewnętrzny_blok”
Zakresy w zagnieżdżonym bloku: zakres zmienny
W blokach zagnieżdżonych należy wyraźnie zrozumieć zakres i widoczność każdego bloku przed ich użyciem. Szczególnie w bloku wewnętrznym widoczne będą elementy zarówno z bloku zewnętrznego, jak i wewnętrznego, dlatego konieczne jest odpowiednie zrozumienie tego.
Poniżej znajdują się punkty podsumowujące zakresy w zagnieżdżonych blokach.
- Elementy zadeklarowane w bloku zewnętrznym i wartość zdefiniowana przed definicją bloku wewnętrznego są widoczne wewnątrz bloku wewnętrznego.
- Elementy zadeklarowane w bloku wewnętrznym nie są widoczne w bloku zewnętrznym. Widoczne są jedynie w obrębie wewnętrznego bloku.
- Blok zewnętrzny i blok wewnętrzny mogą mieć zmienną o tej samej nazwie.
- W przypadku zmiennych o tej samej nazwie, blok wewnętrzny domyślnie będzie odnosił się tylko do zmiennej zadeklarowanej w bloku wewnętrznym.
- Jeśli blok wewnętrzny chce odwoływać się do zmiennej bloku zewnętrznego, która ma taką samą nazwę jak blok wewnętrzny, wówczas blok zewnętrzny powinien być OZNACZONY, a zmienna bloku zewnętrznego może być określana jako „ . '
Poniższy przykład pomoże lepiej zrozumieć te zakresy.
1 przykład: W tym przykładzie zobaczymy zakres zmiennych w bloku wewnętrznym i zewnętrznym. Zobaczymy także, jak odwoływać się do zmiennych za pomocą etykiety bloku.
<<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; /
Wyjaśnienie kodu:
- Linia kodu 1: Oznaczenie zewnętrznego bloku jako „OUTER_BLOCK”.
- Linia kodu 3: Deklarowanie zmiennej „var1” jako VARCHAR2 (30) z wartością początkową „blok zewnętrzny”.
- Linia kodu 4: Deklarowanie zmiennej „var2” jako VARCHAR2 (30) z wartością początkową „wartość przed blokiem wewnętrznym”.
- Linia kodu 6: Oznaczenie bloku wewnętrznego jako „INNER_BLOCK”
- Linia kodu 8: Deklarowanie zmiennej „var1” w bloku wewnętrznym jako VARCHAR2 (30) z wartością początkową „blok wewnętrzny”.
- Linia kodu 10: Drukowanie wartości „var1”. Ponieważ domyślnie nie jest wymieniona żadna etykieta, pobierze ona wartość z bloku wewnętrznego i wyświetli komunikat „inner_block”.
- Linia kodu 11: Drukowanie wartości zewnętrznej zmiennej bloku „var1”. Ponieważ blok wewnętrzny zawiera zmienną o tej samej nazwie, musimy odwołać się do etykiety bloku zewnętrznego. W ten sposób wypisuje komunikat „blok zewnętrzny”.
- Linia kodu 12: Drukowanie wartości zewnętrznej zmiennej bloku „var2”. Ponieważ w bloku wewnętrznym nie ma zmiennej o tej nazwie, domyślnie pobiera ona wartość z bloku zewnętrznego, w związku z czym wyświetla komunikat „wartość przed blokiem wewnętrznym”.
- Zmiennej „var2” w bloku zewnętrznym przypisano wartość „wartość po bloku wewnętrznym”. Ale to przypisanie nastąpiło po zdefiniowaniu bloku wewnętrznego. Dlatego też wartość ta nie występuje w bloku wewnętrznym.
2 przykład: W tym przykładzie znajdziemy różnicę między dwiema liczbami, jedną zadeklarowaną w bloku zewnętrznym, a drugą w bloku wewnętrznym. Obie będą miały tę samą nazwę. Zobaczmy, jak etykieta bloku jest przydatna w odwoływaniu się do tych zmiennych.
<<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; /
Wyjaśnienie kodu:
- Linia kodu 1: Oznaczenie zewnętrznego bloku jako „OUTER_BLOCK”.
- Linia kodu 3: Deklarowanie zmiennej „ln_val” jako NUMBER z wartością początkową „5”.
- Linia kodu 5: Oznaczenie bloku wewnętrznego jako „INNER_BLOCK”
- Linia kodu 7: Deklarowanie zmiennej 'ln_val' w bloku wewnętrznym jako NUMBER o wartości początkowej „3”.
- Linia kodu 9: Drukowanie różnicy wartości „ln_val” z bloku zewnętrznego i wewnętrznego. „ . Do odwoływania się do tych zmiennych używany jest format ”, aby uniknąć konfliktów związanych z tą samą nazwą zmiennej.
Podsumowanie
W tym samouczku nauczyliśmy się, jak utworzyć blok zagnieżdżony i jak obsługiwać zakres w bloku wewnętrznym i blokach zewnętrznych. Widzieliśmy także przykład, w którym zmienne z bloku wewnętrznego i zewnętrznego zostały odniesione do bloku wewnętrznego.