Variabilní rozsah PL/SQL a vnitřní vnější blok: vnořená struktura
⚡ Chytré shrnutí
Vnořené bloky v PL/SQL umisťují jeden blok do druhého, což umožňuje oddělit složitou logiku a izolovat zpracování výjimek. Pochopení rozsahu platnosti proměnných mezi vnějším a vnitřním blokem a použití popisků bloků zaručuje jednoznačnost proměnných se stejným názvem.

Co jsou vnořené bloky Oracle?
In PL / SQLKaždý blok může být vnořen do jiného bloku. Takový blok se označuje jako vnořený blok. Vnořené bloky jsou velmi běžné, když chcete provést určitý proces a zároveň uchovávatping kód pro daný proces v samostatném kontejneru (bloku).
Koncept vnořených bloků pomáhá programátorovi zlepšit čitelnost oddělením složité logiky do jednotlivých bloků a umožňuje... výjimka pro každý blok, který má být zpracován uvnitř hlavního vnějšího bloku.
Vnořená bloková struktura
Blok může být vnořen do jiného bloku. Může být vnořen buď do prováděcí části, nebo do části pro zpracování výjimek a tyto bloky mohou být také označeny. Jeden vnější blok může obsahovat mnoho vnitřních bloků. Každý vnitřní blok je sám o sobě PL/SQL blok, takže všechny vlastnosti a charakteristiky vnitřního bloku jsou stejné jako u vnějšího bloku. Nadřazený blok je hlavní blok a podřízený blok je vnořený blok.
Obrázek níže znázorňuje strukturu vnořených bloků, ve které je nadřazený blok hlavním blokem a podřízený blok vnořeným blokem.
Níže je uvedena syntaxe vnořeného bloku. Snímek obrazovky níže ukazuje syntaxi vnořeného bloku s označenými vnějšími a vnitřními bloky.
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ém bloku je nutné před použitím jasně pochopit rozsah a viditelnost každého bloku. Zejména ve vnitřním bloku jsou viditelné prvky z vnějšího i vnitřního bloku, takže je nezbytné tomu správně porozumět.
Níže uvedené body shrnují rozsahy ve vnořených blocích.
- Prvky deklarované ve vnějším bloku a hodnota definovaná 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 uvnitř vnitřního bloku.
- Vnější blok a vnitřní blok mohou mít proměnlivý se stejným jménem.
- V případě proměnných se stejným názvem se vnitřní blok standardně vztahuje pouze na proměnnou deklarovanou ve vnitřním bloku.
- Pokud se vnitřní blok chce odkazovat na proměnnou vnějšího bloku, která má stejný název jako proměnná vnitřního bloku, pak musí být vnější blok OZNAČEN a na proměnnou vnějšího bloku lze odkazovat jako ' . '.
Níže uvedený příklad vám pomůže lépe porozumět těmto oborům.
Příklad 1: V tomto příkladu vidíme rozsah platnosti proměnných ve vnitřním a vnějším bloku. Také vidíme, jak odkazovat na proměnné pomocí označení bloku.
Níže uvedený snímek obrazovky ukazuje příklad 1, kde vnitřní blok odkazuje na proměnnou vnějšího bloku pomocí označení bloku.
<<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 Vysvětlení:
- Code řádek 1: Označení vnějšího bloku jako „OUTER_BLOCK“.
- Code řádek 3: Deklarace proměnné 'var1' jako VARCHAR2 (30) s počáteční hodnotou „outer_block“.
- Code řádek 4: Deklarace proměnné 'var2' jako VARCHAR2(30) s počáteční hodnotou „hodnota před vnitřním blokem“.
- Code řádek 6: Označení vnitřního bloku jako „VNITŘNÍ_BLOK“.
- Code řádek 8: Deklarace proměnné 'var1' ve vnitřním bloku jako VARCHAR2 (30) s počáteční hodnotou „inner_block“.
- Code řádek 10: Výpis hodnoty proměnné 'var1'. Protože není uveden žádný popisek, standardně se hodnota přebírá z vnitřního bloku, a proto se vypíše zpráva 'inner_block'.
- Code řádek 11: Výpis hodnoty proměnné vnějšího bloku 'var1'. Protože vnitřní blok má proměnnou se stejným názvem, odkazujeme na popisek vnějšího bloku. Vypíše se tedy zpráva 'outer_block'.
- Code řádek 12: Výpis hodnoty proměnné vnějšího bloku 'var2'. Protože ve vnitřním bloku není žádná proměnná s tímto názvem, standardně se hodnota přebírá z vnějšího bloku, a proto se vypíše zpráva 'hodnota před vnitřním blokem'.
- Proměnné 'var2' ve vnějším bloku je přiřazena hodnota 'hodnota po vnitřním bloku'. Toto přiřazení se však děje po definici vnitřního bloku, takže tato hodnota uvnitř vnitřního bloku není přítomna.
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. Obě mají stejný název. Podívejme se, jak je označení bloku užitečné při odkazování na tyto proměnné.
Níže uvedený snímek obrazovky ukazuje příklad 2, který vypočítává rozdíl mezi vnějšími a vnitřními proměnnými bloku se stejným názvem.
<<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 Vysvětlení:
- Code řádek 1: Označení vnějšího bloku jako „OUTER_BLOCK“.
- Code řádek 3: Deklarace proměnné 'ln_val' jako NUMBER s počáteční hodnotou „5“.
- Code řádek 5: Označení vnitřního bloku jako „VNITŘNÍ_BLOK“.
- Code řádek 7: Deklarace proměnné 'ln_val' ve vnitřním bloku jako NUMBER s počáteční hodnotou „3“.
- Code řádek 9: Výpis rozdílu hodnoty 'ln_val' z vnějšího a vnitřního bloku. Funkce „ . Pro odkazování na tyto proměnné se používá formát ”, aby se předešlo konfliktům způsobeným stejným názvem proměnné.




