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.

Zagnieżdżona struktura blokowa

Poniżej znajduje się składnia zagnieżdżonego bloku.

Zagnieżdżona struktura blokowa

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.

Zakresy w zagnieżdżonym 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.

Zakresy w zagnieżdżonym bloku

<<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.