PL/SQL-muuttujan laajuus ja sisäinen ulkolohko: sisäkkäinen rakenne
Mikä on sisäkkäiset lohkot Oracle?
PL/SQL:ssä jokainen lohko voidaan upottaa toiseen lohkoon. Niitä kutsutaan sisäkkäisiksi lohkoiksi. Sisäkkäiset lohkot ovat hyvin yleisiä, kun haluamme suorittaa tietyn prosessin, ja samalla näiden prosessien koodi tulee säilyttää erillisessä säiliössä (lohkossa).
Sisäkkäisten lohkojen konsepti auttaa ohjelmoijaa parantamaan luettavuutta erottamalla monimutkaiset asiat kuhunkin lohkoon ja käsittelemään kunkin lohkon poikkeuksia pääulomman lohkon sisällä.
Sisäkkäinen lohkorakenne
Lohko voidaan upottaa toiseen lohkoon. Tämä voidaan upottaa joko suoritusosaan tai poikkeusten käsittely osa. Nämä lohkot voidaan myös merkitä. Yksi ulompi lohko voi sisältää useita sisälohkoja. Jokainen sisälohko on jälleen kerran a PL/SQL-lohko, joten kaikki sisälohkon ominaisuudet ja ominaisuudet ovat samat kuin ulkolohkon. Alla oleva kuva antaa kuvallisen esityksen sisäkkäisestä lohkorakenteesta. Päälohko on päälohko ja alalohko on sisäkkäinen lohko.
Alla on sisäkkäisen lohkon syntaksi.
Sisäkkäinen lohkosyntaksi
<<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;
- Yllä oleva syntaksi näyttää sisäkkäisen lohkon, joka sisältää yhteensä kaksi lohkoa.
- Nämä lohkot on merkitty "outer_block" ja "inner_block"
Laajuudet sisäkkäisissä lohkoissa: muuttuva laajuus
Sisäkkäisissä lohkoissa jokaisen lohkon laajuus ja näkyvyys on ymmärrettävä selvästi ennen niiden käyttöä. Erityisesti sisälohkossa sekä ulko- että sisälohkon elementit ovat näkyvissä, joten tämä on ymmärrettävä kunnolla.
Alla olevat kohdat sisältävät yhteenvedon lisää sisäkkäisten lohkojen laajuuksista.
- Ulkolohkossa ilmoitetut elementit ja arvo, joka on määritelty ennen sisälohkon määritelmää, näkyvät sisemmän lohkon sisällä.
- Sisälohkossa ilmoitetut elementit eivät näy ulkolohkossa. Ne näkyvät vain sisälohkossa.
- Ulkolohkolla ja sisälohkolla voi olla samanniminen muuttuja.
- Samannimisten muuttujien tapauksessa sisempi lohko viittaa oletuksena vain sisäisessä lohkossa ilmoitettuun muuttujaan.
- Jos sisempi lohko haluaa viitata ulompaan lohkomuuttujaan, jolla on sama nimi kuin sisemmällä lohkolla, ulompi lohko tulee olla LABELLED ja ulompaa lohkomuuttujaa voidaan kutsua nimellä " . '
Alla oleva esimerkki auttaa ymmärtämään enemmän näistä laajuuksista.
Esimerkki 1: Tässä esimerkissä aiomme nähdä muuttujien laajuuden sisä- ja ulkolohkossa. Lisäksi aiomme nähdä kuinka viitataan muuttujiin lohkotunnisteen avulla.
<<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; /
Koodin selitys:
- Koodirivi 1: Ulkolohkon merkitseminen "OUTER_BLOCK".
- Koodirivi 3: Muuttujan 'var1' ilmoittaminen VARCHAR2:ksi (30), jonka alkuarvo on "outer block".
- Koodirivi 4: Muuttujan 'var2' ilmoittaminen VARCHAR2:ksi (30), jonka alkuarvo on "arvo ennen sisäistä lohkoa".
- Koodirivi 6: Sisälohkon merkitseminen "INNER_BLOCK"
- Koodirivi 8: Sisälohkon muuttujan var1 ilmoittaminen VARCHAR2:ksi (30), jonka alkuarvo on "inner block".
- Koodirivi 10: Tulostetaan muuttujan 'muuttuja1' arvo. Koska oletusarvoisesti tunnistetta ei mainita, se ottaa arvon sisemmästä lohkosta, joten tulostetaan "inner_block" -viesti.
- Koodirivi 11: Tulostetaan ulkolohkomuuttujan 'var1' arvo. Koska sisemmällä lohkolla on samanniminen muuttuja, meidän on viitattava ulompaan lohkoon. Näin tulostetaan viesti "ulompi lohko".
- Koodirivi 12: Ulomman lohkomuuttujan 'var2' arvon tulostaminen. Koska sisälohkossa ei ole tämännimistä muuttujaa, se ottaa oletusarvoisesti arvon ulommasta lohkosta, joten tulostetaan "arvo ennen sisäistä lohkoa" -viesti.
- Ulkoisen lohkon muuttujalle 'var2' on annettu arvo 'value after inner block'. Mutta tämä tehtävä on tapahtunut sisäisen lohkon määrittelyn jälkeen. Siksi tätä arvoa ei ole sisälohkossa.
Esimerkki 2: Tässä esimerkissä aiomme löytää eron kahden luvun välillä, joista toinen on ilmoitettu ulkolohkossa ja toinen sisemmässä lohkossa. Molemmilla tulee olemaan sama nimi. Katsotaanpa, kuinka lohkotunniste on hyödyllinen viitattaessa näihin muuttujiin.
<<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; /
Koodin selitys:
- Koodirivi 1: Ulkolohkon merkitseminen "OUTER_BLOCK".
- Koodirivi 3: Määritetään muuttuja 'ln_val' NUMEROksi, jonka alkuarvo on "5".
- Koodirivi 5: Sisälohkon merkitseminen "INNER_BLOCK"
- Koodirivi 7: Sisälohkon muuttujan 'ln_val' ilmoittaminen NUMEROksi, jonka alkuarvo on "3".
- Koodirivi 9: Tulostetaan 'ln_val':n arvon ero ulko- ja sisälohkosta. " . ”-muotoa käytetään viittaamaan näihin muuttujiin, jotta vältetään ristiriidat samasta muuttujan nimestä.
Yhteenveto
Tässä opetusohjelmassa olemme oppineet luomaan sisäkkäisen lohkon ja käsittelemään laajuutta sisä- ja ulkolohkoissa. Olemme myös nähneet esimerkin, jossa sisemmän ja ulkoisen lohkon muuttujiin viitattiin sisemmän lohkon sisällä.