Zakres zmiennej PL / SQL & Wewnętrzny blok zewnętrzny: struktura zagnieżdżona

Spisie treści:

Anonim

Co to jest Oracle zagnieżdżonych bloków?

W PL / SQL każdy blok może być zagnieżdżony w innym bloku. Nazywa się je zagnieżdżonymi blokami. Zagnieżdżone bloki 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 programiście poprawić czytelność poprzez oddzielenie złożonych elementów do każdego bloku i obsługę wyjątków dla każdego bloku wewnątrz głównego bloku zewnętrznego.

W tym samouczku nauczysz się:

  • Zagnieżdżona struktura blokowa
  • Zakresy w zagnieżdżonym bloku: zakres zmienny

Zagnieżdżona struktura blokowa

Blok może być zagnieżdżony w innym bloku. Może to być zagnieżdżone w części wykonawczej lub w części obsługi wyjątków. Te bloki można również opisać. Jeden blok zewnętrzny może zawierać wiele bloków wewnętrznych. Każdy blok wewnętrzny jest ponownie blokiem PL / SQL, dlatego wszystkie właściwości i cechy bloku wewnętrznego będą takie same, jak blok zewnętrzny. Poniższy obraz przedstawia obrazową reprezentację zagnieżdżonej struktury bloków. Blok nadrzędny to blok główny, a blok podrzędny to blok zagnieżdżony.

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

Składnia zagnieżdżonych bloków

<>DECLAREBEGIN<>DECLAREBEGIN.EXCEPTIONEND;EXCEPTIONEND;
  • Powyższa składnia przedstawia zagnieżdżony blok zawierający łącznie dwa bloki.
  • Te bloki są oznaczone jako „external_block” i „internal_block”

Zakresy w zagnieżdżonym bloku: zakres zmienny

W blokach zagnieżdżonych należy dobrze 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 właściwe zrozumienie tego.

Poniższe punkty podsumują więcej na temat zakresów 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. Są widoczne tylko w bloku wewnętrznym.
  • 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 ETYKIETĄ, a zmienną bloku zewnętrznego można określić jako „.

Poniższy przykład pomoże lepiej zrozumieć te zakresy.

Przykład 1 : W tym przykładzie zobaczymy zakres zmiennych w bloku wewnętrznym i zewnętrznym. Zobaczymy również, jak odwoływać się do zmiennych za pomocą etykiety bloku.

<>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;/

Objaśnienie kodu:

  • Linia kodu 1 : oznaczenie bloku zewnętrznego jako „OUTER_BLOCK”.
  • Linia kodu 3 : Zadeklarowanie zmiennej „zmienna1” jako VARCHAR2 (30) z wartością początkową „bloku zewnętrznego”.
  • Linia kodu 4 : Zadeklarowanie zmiennej „var2” jako VARCHAR2 (30) z wartością początkową „wartość przed blokiem wewnętrznym”.
  • Linia kodu 6: Oznaczanie bloku wewnętrznego jako „INNER_BLOCK”
  • Linia kodu 8: Zadeklarowanie zmiennej „zmienna1” w bloku wewnętrznym jako VARCHAR2 (30) z wartością początkową „bloku wewnętrznego”.
  • Linia kodu 10: Drukowanie wartości „zmienna1”. Ponieważ żadna etykieta nie jest wymieniona domyślnie, pobierze wartość z wewnętrznego bloku, stąd wypisywany jest komunikat „inner_block”.
  • Linia kodu 11: Drukowanie wartości zmiennej zewnętrznej bloku „var1”. Ponieważ blok wewnętrzny ma zmienną o tej samej nazwie, musimy odwołać się do zewnętrznej etykiety bloku. W ten sposób wypisuje się komunikat „zewnętrzny blok”.
  • Linia kodu 12: Drukowanie wartości zmiennej zewnętrznej bloku „var2”. Ponieważ w bloku wewnętrznym nie ma zmiennej o tej nazwie, domyślnie pobierze ona wartość z bloku zewnętrznego, stąd wypisuje komunikat „wartość przed blokiem wewnętrznym”.
  • Zmiennej „var2” w bloku zewnętrznym została przypisana wartość „wartość po bloku wewnętrznym”. Ale to przypisanie nastąpiło po zdefiniowaniu wewnętrznego bloku. Stąd ta wartość nie występuje w bloku wewnętrznym.

Przykład 2 : 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, w jaki sposób etykieta blokowa jest przydatna w odwoływaniu się do tych zmiennych.

<>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;/

Objaśnienie kodu:

  • Linia kodu 1 : oznaczenie bloku zewnętrznego jako „OUTER_BLOCK”.
  • Linia kodu 3 : Zadeklarowanie zmiennej „ln_val” jako LICZBA o wartości początkowej „5”.
  • Linia kodu 5: oznaczanie bloku wewnętrznego jako „INNER_BLOCK”
  • Linia kodu 7: Zadeklarowanie zmiennej „ln_val” w bloku wewnętrznym jako LICZBA o początkowej wartości „3”.
  • Linia kodu 9: Drukowanie różnicy wartości „ln_val” z bloku zewnętrznego i wewnętrznego. Format „. ” jest używany do odwoływania się do tych zmiennych, aby uniknąć konfliktów z powodu tej samej nazwy zmiennej.

Podsumowanie

W tym samouczku nauczyliśmy się, jak utworzyć zagnieżdżony blok i jak obsługiwać zakres w blokach wewnętrznych i zewnętrznych. Widzieliśmy również przykład, w którym zmienne z bloku wewnętrznego i zewnętrznego zostały odniesione wewnątrz bloku wewnętrznego.