Variabel omfang PL / SQL & Indre ytre blokk: nestet struktur

Innholdsfortegnelse:

Anonim

Hva er Nested Blocks Oracle?

I PL / SQL kan hver blokk nestes i en annen blokk. De blir referert til som en nestet blokk. Nestede blokker er veldig vanlige når vi ønsker å utføre den bestemte prosessen, og samtidig skal koden for denne prosessen oppbevares i en egen beholder (blokk).

Nestet blokk-konsept vil hjelpe programmereren med å forbedre lesbarheten ved å skille de komplekse tingene i hver blokk og å håndtere unntaket for hver blokk inne i den ytre hovedblokken.

I denne veiledningen vil du lære-

  • Nestet blokkstruktur
  • Omfang i nestet blokk: variabelt omfang

Nestet blokkstruktur

En blokk kan nestes i en annen blokk. Dette kan nestes enten i utførelsesdelen eller i unntakshåndteringsdelen. Disse blokkene kan også merkes. En ytre blokk kan inneholde mange indre blokker. Hver indre blokk er igjen en PL / SQL-blokk, derfor vil alle egenskapene og egenskapene til den indre blokken være den samme som den ytre blokken. Bildet nedenfor viser den billedlige fremstillingen av nestet blokkstruktur. Foreldreblokk er hovedblokk og barneblokk er nestet blokk.

Nedenfor er syntaksen for den nestede blokken.

Nestet bloksyntaks

<>DECLAREBEGIN<>DECLAREBEGIN.EXCEPTIONEND;EXCEPTIONEND;
  • Syntaksen ovenfor viser den nestede blokken som inneholder totalt to blokker.
  • Disse blokkene er merket som 'outer_block' og 'inner_block'

Omfang i nestet blokk: variabelt omfang

I nestet blokk må man forstå omfanget og synligheten til hver blokk tydelig før man bruker dem. Spesielt i den indre blokken vil elementene fra både ytre og indre blokk være synlige, derfor er riktig forståelse av dette nødvendig.

Nedenfor vil poengene oppsummere mer angående omfanget i nestede blokker.

  • Elementene som er deklarert i den ytre blokken og verdien som er definert før definisjonen av den indre blokken, er synlig inne i den indre blokken.
  • Elementene deklarert i den indre blokken er ikke synlige i den ytre blokken. De er bare synlige i den indre blokken.
  • Ytre blokk og indre blokk kan ha en variabel med samme navn.
  • I tilfelle variabler med samme navn, vil indre blokk som standard referere til variabelen kun deklarert i indre blokk.
  • Hvis indre blokk vil henvise til den ytre blokkvariabelen som har samme navn som den indre blokken, bør den ytre blokken MERKES, og den ytre blokkvariabelen kan refereres til som '. '

Eksemplet nedenfor vil hjelpe deg med å forstå mer om disse omfangene.

Eksempel 1 : I dette eksemplet skal vi se omfanget av variabler i den indre og ytre blokken. Vi skal også se hvordan vi henviser variablene ved hjelp av blokketiketten.

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

Kode Forklaring:

  • Kodelinje 1 : Merking av den ytre blokken som "OUTER_BLOCK".
  • Kodelinje 3 : Erklærer en variabel 'var1' som VARCHAR2 (30) med den opprinnelige verdien av "ytre blokk".
  • Kodelinje 4 : Erklærer en variabel 'var2' som VARCHAR2 (30) med startverdien "verdi før indre blokk".
  • Kodelinje 6: Merking av den indre blokken som "INNER_BLOCK"
  • Kodelinje 8: Deklarerer en variabel 'var1' i den indre blokken som VARCHAR2 (30) med den opprinnelige verdien av "indre blokk".
  • Kodelinje 10: Utskrift av verdien til 'var1'. Siden ingen etiketter er nevnt som standard, vil den ta verdien fra en indre blokk, og dermed skrive ut "inner_block" -meldingen.
  • Kodelinje 11: Utskrift av verdien til den ytre blokkvariabelen 'var1'. Siden den indre blokken har variabelen med samme navn, må vi henvise til ytre blokkmerke. Dermed skriver du ut meldingen "ytre blokk".
  • Kodelinje 12: Utskrift av verdien av den ytre blokkvariabelen 'var2'. Siden det ikke er noen variabel med dette navnet til stede i den indre blokken, vil den som standard ta verdien fra en ytre blokk, og dermed skrive ut "verdi før indre blokk" -melding.
  • Variabelen 'var2' i den ytre blokken er tilordnet verdien 'verdi etter indre blokk'. Men denne oppgaven har skjedd etter definisjonen av en indre blokk. Derfor er denne verdien ikke til stede i den indre blokken.

Eksempel 2 : I dette eksemplet skal vi finne forskjellen mellom to tall, ett deklarert ved den ytre blokken og et annet ved den indre blokken. Begge vil ha samme navn. La oss se hvordan blokketikett er nyttig for å henvise til disse variablene.

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

Kode Forklaring:

  • Kodelinje 1 : Merking av den ytre blokken som "OUTER_BLOCK".
  • Kodelinje 3 : Erklærer en variabel 'ln_val' som NUMBER med den opprinnelige verdien "5".
  • Kodelinje 5: Merking av den indre blokken som "INNER_BLOCK"
  • Kodelinje 7: Erklærer en variabel 'ln_val' i indre blokk som NUMBER med den opprinnelige verdien "3".
  • Kodelinje 9: Utskrift av forskjellen i verdi på 'ln_val' fra ytre og indre blokk. Formatet ". " brukes til å henvise til disse variablene for å unngå konflikter på grunn av samme variabelnavn.

Sammendrag

I denne veiledningen har vi lært hvordan du lager en nestet blokk og hvordan du håndterer omfanget i indre blokk og ytre blokker. Vi har også sett et eksempel der variablene fra den indre og ytre blokken ble henvist inne i den indre blokken.