Variabilní rozsah PL/SQL a vnitřní vnější blok: vnořená struktura
Co jsou vnořené bloky Oracle?
V PL/SQL lze každý blok vnořit do jiného bloku. Jsou označovány jako vnořený blok. Vnořené bloky jsou velmi běžné, když chceme provést určitý proces, a zároveň by měl být kód těchto procesů uložen v samostatném kontejneru (bloku).
Koncept vnořených bloků pomůže programátorovi zlepšit čitelnost oddělením složitých věcí do každého bloku a zpracovat výjimku pro každý blok uvnitř hlavního vnějšího bloku.
Vnořená bloková struktura
Blok lze vnořit do jiného bloku. To může být vnořeno buď do prováděcí části nebo do zpracování výjimek část. Tyto bloky lze také označit. Jeden vnější blok může obsahovat mnoho vnitřních bloků. Každý vnitřní blok je opět a PL/SQL blok, tudíž všechny vlastnosti a charakteristiky vnitřního bloku budou stejné jako vnějšího bloku. Níže uvedený obrázek poskytuje obrazovou reprezentaci vnořené blokové struktury. Rodičovský blok je hlavní blok a podřízený blok je vnořený blok.
Níže je syntaxe pro vnořený blok.
Syntaxe vnořených bloků
<<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;
- Výše uvedená syntaxe ukazuje vnořený blok, který obsahuje celkem dva bloky.
- Tyto bloky jsou označeny jako 'outer_block' a 'inner_block'
Rozsahy ve vnořeném bloku: Proměnný rozsah
Ve vnořených blocích je třeba před použitím jasně porozumět rozsahu a viditelnosti každého bloku. Zejména ve vnitřním bloku budou viditelné prvky z vnějšího i vnitřního bloku, proto je nutné tomu správně porozumět.
Níže uvedené body shrnují více týkající se rozsahů ve vnořených blocích.
- Prvky deklarované ve vnějším bloku a hodnota, která je definována před definicí vnitřního bloku, jsou viditelné uvnitř vnitřního bloku.
- Prvky deklarované ve vnitřním bloku nejsou viditelné ve vnějším bloku. Jsou viditelné pouze ve vnitrobloku.
- Vnější blok a vnitřní blok mohou mít proměnnou se stejným názvem.
- V případě proměnných se stejným názvem bude vnitřní blok ve výchozím nastavení odkazovat pouze na proměnnou deklarovanou ve vnitřním bloku.
- Pokud chce vnitřní blok odkazovat na proměnnou vnějšího bloku, která má stejný název jako vnitřní blok, pak by měl být vnější blok OZNAČEN a proměnná vnějšího bloku může být označena jako „ . '
Níže uvedený příklad vám pomůže lépe porozumět těmto rozsahům.
Příklad 1: V tomto příkladu uvidíme rozsah proměnných ve vnitřním a vnějším bloku. Také uvidíme, jak odkazovat na proměnné pomocí označení 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; /
Vysvětlení kódu:
- Řádek kódu 1: Označení vnějšího bloku jako „OUTER_BLOCK“.
- Řádek kódu 3: Deklarace proměnné 'var1' jako VARCHAR2 (30) s počáteční hodnotou „vnějšího bloku“.
- Řádek kódu 4: Deklarace proměnné 'var2' jako VARCHAR2 (30) s počáteční hodnotou „hodnota před vnitřním blokem“.
- Řádek kódu 6: Označení vnitřního bloku jako „INNER_BLOCK“
- Řádek kódu 8: Deklarování proměnné 'var1' ve vnitřním bloku jako VARCHAR2 (30) s počáteční hodnotou „vnitřního bloku“.
- Řádek kódu 10: Tisk hodnoty 'var1'. Protože ve výchozím nastavení není zmíněn žádný štítek, převezme hodnotu z vnitřního bloku, a proto se vytiskne zpráva 'inner_block'.
- Řádek kódu 11: Tisk hodnoty proměnné vnějšího bloku 'var1'. Protože vnitřní blok má proměnnou se stejným názvem, musíme odkazovat na označení vnějšího bloku. Tím se vytiskne zpráva 'vnější blok'.
- Řádek kódu 12: Tisk hodnoty proměnné vnějšího bloku 'var2'. Protože ve vnitřním bloku není přítomna žádná proměnná s tímto názvem, ve výchozím nastavení převezme hodnotu z vnějšího bloku, a proto se vytiskne zpráva „hodnota před vnitřním blokem“.
- Proměnná 'var2' ve vnějším bloku byla přiřazena s hodnotou 'hodnota po vnitřním bloku'. K tomuto přiřazení však došlo až po definici vnitřního bloku. Proto tato hodnota není přítomna ve vnitřním bloku.
Příklad 2: V tomto příkladu najdeme rozdíl mezi dvěma čísly, jedním deklarovaným ve vnějším bloku a druhým ve vnitřním bloku. Oba budou mít stejné jméno. Podívejme se, jak je štítek bloku užitečný při odkazování na tyto proměnné.
<<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; /
Vysvětlení kódu:
- Řádek kódu 1: Označení vnějšího bloku jako „OUTER_BLOCK“.
- Řádek kódu 3: Deklarování proměnné „ln_val“ jako NUMBER s počáteční hodnotou „5“.
- Řádek kódu 5: Označení vnitřního bloku jako „INNER_BLOCK“
- Řádek kódu 7: Deklarování proměnné 'ln_val' ve vnitřním bloku jako NUMBER s počáteční hodnotou „3“.
- Řádek kódu 9: Tisk rozdílu v hodnotě 'ln_val' z vnějšího a vnitřního bloku. " . ” se používá k odkazování na tyto proměnné, aby se předešlo konfliktům kvůli stejnému názvu proměnné.
Shrnutí
V tomto tutoriálu jsme se naučili, jak vytvořit vnořený blok a jak zacházet s rozsahem ve vnitřním bloku a vnějších blocích. Viděli jsme také příklad, kdy byly proměnné z vnitřního a vnějšího bloku odkazovány uvnitř vnitřního bloku.