Wat is Oracle met geneste blokken?
In PL / SQL kan elk blok in een ander blok worden genest. Ze worden een genest blok genoemd. Geneste blokken zijn heel gebruikelijk wanneer we het bepaalde proces willen uitvoeren, en tegelijkertijd moet de code voor dit proces in een aparte container (blok) worden bewaard.
Het geneste blokconcept helpt de programmeur om de leesbaarheid te verbeteren door de complexe dingen in elk blok te scheiden en de uitzondering voor elk blok binnen het buitenste hoofdblok af te handelen.
In deze tutorial leer je-
- Geneste blokstructuur
- Bereik in genest blok: variabel bereik
Geneste blokstructuur
Een blok kan in een ander blok worden genest. Dit kan worden genest in het uitvoeringsgedeelte of in het uitzonderingsafhandelingsgedeelte. Dit blok kan ook worden gelabeld. Een buitenblok kan veel binnenblokken bevatten. Elk binnenblok is wederom een PL / SQL-blok, dus alle eigenschappen en kenmerken van het binnenblok zullen hetzelfde zijn als het buitenblok. De onderstaande afbeelding geeft de grafische weergave van de geneste blokstructuur. Het bovenliggende blok is het hoofdblok en het onderliggende blok is het geneste blok.
Hieronder staat de syntaxis voor het geneste blok.
Syntaxis van geneste blokken
<>DECLARE BEGIN < >DECLARE BEGIN .EXCEPTION END; EXCEPTION END;
- De bovenstaande syntaxis toont het geneste blok dat in totaal twee blokken bevat.
- Deze blokken zijn gelabeld als 'outer_block' en 'inner_block'
Bereik in genest blok: variabel bereik
In geneste blokken moet men de reikwijdte en zichtbaarheid van elk blok duidelijk begrijpen voordat u ze gebruikt. Met name in het binnenblok zullen de elementen van zowel buiten- als binnenblok zichtbaar zijn, daarom is een goed begrip hiervan noodzakelijk.
Onderstaande punten zullen meer samenvatten met betrekking tot de bereiken in geneste blokken.
- De elementen die in het buitenste blok zijn gedeclareerd en de waarde die is gedefinieerd voordat de definitie van het binnenste blok zichtbaar is in het binnenste blok.
- De elementen die in het binnenste blok zijn gedeclareerd, zijn niet zichtbaar in het buitenste blok. Ze zijn alleen zichtbaar binnen het binnenblok.
- Buitenblok en binnenblok kunnen een variabele hebben met dezelfde naam.
- In het geval van variabelen met dezelfde naam, verwijst het innerlijke blok standaard alleen naar de variabele die in het binnenste blok is gedeclareerd.
- Als binnenblok wil verwijzen naar de buitenste blokvariabele die dezelfde naam heeft als die van het binnenste blok, dan moet het buitenste blok LABELED worden, en de buitenste blokvariabele kan worden aangeduid als '
. '
Het onderstaande voorbeeld zal helpen om meer over deze scopes te begrijpen.
Voorbeeld 1 : In dit voorbeeld gaan we het bereik van variabelen in het binnenste en buitenste blok bekijken. We gaan ook zien hoe we de variabelen kunnen verwijzen met behulp van bloklabel.
<>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;/
Code Verklaring:
- Coderegel 1 : Labelen van het buitenste blok als "OUTER_BLOCK".
- Coderegel 3 : Declaratie van een variabele 'var1' als VARCHAR2 (30) met de beginwaarde "buitenste blok".
- Coderegel 4 : Declaratie van een variabele 'var2' als VARCHAR2 (30) met de beginwaarde "waarde vóór binnenblok".
- Coderegel 6: het binnenste blok labelen als "INNER_BLOCK"
- Coderegel 8: Declaratie van een variabele 'var1' in het binnenste blok als VARCHAR2 (30) met de beginwaarde "inner block".
- Coderegel 10: Afdrukken van de waarde van 'var1'. Aangezien er standaard geen label wordt vermeld, zal het de waarde van een binnenblok overnemen, waardoor het bericht 'inner_block' wordt afgedrukt.
- Coderegel 11: Afdrukken van de waarde van de buitenste blokvariabele 'var1'. Omdat het binnenste blok de variabele met dezelfde naam heeft, moeten we verwijzen naar het buitenste bloklabel. Zo wordt het bericht 'buitenste blok' afgedrukt.
- Coderegel 12: Afdrukken van de waarde van de buitenste blokvariabele 'var2'. Aangezien er geen variabele met deze naam aanwezig is in het binnenste blok, zal deze standaard de waarde van een buitenste blok aannemen, en daarom wordt het bericht 'waarde vóór binnenste blok' afgedrukt.
- Aan de variabele 'var2' in het buitenste blok is de waarde 'waarde na binnenblok' toegekend. Maar deze opdracht is gebeurd na de definitie van een binnenblok. Daarom is deze waarde niet aanwezig in het binnenblok.
Voorbeeld 2 : In dit voorbeeld gaan we het verschil vinden tussen twee getallen, een gedeclareerd bij het buitenste blok en een andere bij het binnenste blok. Beiden zullen dezelfde naam hebben. Laten we eens kijken hoe bloklabel nuttig is bij het verwijzen naar deze variabelen.
<>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;/
Code Verklaring:
- Coderegel 1 : Labelen van het buitenste blok als "OUTER_BLOCK".
- Coderegel 3 : Declaratie van een variabele 'ln_val' als NUMBER met de beginwaarde "5".
- Coderegel 5: labelen van het binnenste blok als "INNER_BLOCK"
- Coderegel 7: Declaratie van een variabele 'ln_val' in het binnenste blok als NUMBER met de beginwaarde "3".
- Coderegel 9: Afdrukken van het verschil in waarde van 'ln_val' van buitenste en binnenste blok. Het "
. " -formaat wordt gebruikt om naar deze variabelen te verwijzen om conflicten als gevolg van dezelfde variabelenaam te vermijden.
Overzicht
In deze tutorial hebben we geleerd hoe je een genest blok maakt en hoe je omgaat met de scope in binnenste blok en buitenste blokken. We hebben ook een voorbeeld gezien waarbij de variabelen van het binnenste en buitenste blok binnen het binnenste blok werden verwezen.