PL/SQL Değişken Kapsamı ve İç Dış Blok: İç İçe Yapı
⚡ Akıllı Özet
PL/SQL'de iç içe bloklar, bir bloğu diğerinin içine yerleştirerek karmaşık mantığı ayırmanıza ve istisna işlemeyi izole etmenize olanak tanır. Dış ve iç bloklar arasındaki değişken kapsamını anlamak ve blok etiketlerini kullanmak, aynı isimli değişkenlerin belirsizliğini ortadan kaldırır.
İç İçe Bloklar Nedir? Oracle?
In PL / SQLHer blok başka bir bloğun içine yerleştirilebilir. Bu tür bir bloğa iç içe blok denir. İç içe bloklar, bir işlemi gerçekleştirirken aynı zamanda başka bir bloğu da korumak istediğinizde çok yaygındır.ping Bu işleme ait kod ayrı bir konteynerde (blokta) yer alır.
İç içe blok kavramı, karmaşık mantığı ayrı bloklara ayırarak programcının okunabilirliği artırmasına yardımcı olur ve ayrıca istisna Ana dış bloğun içinde işlenecek her bir blok için.
İç İçe Blok Yapısı
Bir blok başka bir bloğun içine yerleştirilebilir. Bu iç içe yerleştirme, yürütme bölümünde veya istisna işleme bölümünde olabilir ve bu bloklar etiketlenebilir. Bir dış blok birçok iç blok içerebilir. Her iç blok kendi başına bir PL/SQL bloğuDolayısıyla içteki bloğun tüm özellikleri ve nitelikleri dıştaki bloğunkilerle aynıdır. Üst blok ana bloktur ve alt blok ise iç içe geçmiş bloktur.
Aşağıdaki görsel, üst bloğun ana blok, alt bloğun ise iç içe geçmiş blok olduğu, iç içe geçmiş blok yapısının resimli bir temsilini vermektedir.
Aşağıda iç içe blok için sözdizimi verilmiştir. Aşağıdaki ekran görüntüsü, etiketlenmiş dış ve iç bloklarıyla birlikte iç içe blok sözdizimini göstermektedir.
İç İçe Blok Söz Dizimi
<<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;
- Yukarıdaki sözdizimi, toplamda iki blok içeren iç içe geçmiş bloğu göstermektedir.
- Bu bloklar 'outer_block' ve 'inner_block' olarak etiketlenmiştir.
İç İçe Bloktaki Kapsamlar: Değişken Kapsam
İç içe geçmiş bloklarda, blokları kullanmadan önce her birinin kapsamını ve görünürlüğünü net bir şekilde anlamanız gerekir. Özellikle iç blokta, hem dış hem de iç bloktaki öğeler görünür olduğundan, bunun doğru bir şekilde anlaşılması gereklidir.
Aşağıdaki maddeler, iç içe geçmiş bloklardaki kapsamları özetlemektedir.
- Dış blokta tanımlanan öğeler ve iç blok tanımından önce tanımlanan değer, iç blok içinde görünür.
- İç blokta tanımlanan öğeler dış blokta görünmez. Sadece iç blok içinde görünürler.
- Dış blok ve iç blok aynı özelliklere sahip olabilir. değişken aynı isimde.
- Aynı ada sahip değişkenler söz konusu olduğunda, içteki blok varsayılan olarak yalnızca iç blokta tanımlanan değişkene atıfta bulunur.
- Eğer iç blok, dış bloktaki aynı ada sahip değişkene atıfta bulunmak istiyorsa, dış blok ETİKETLENMELİ ve dış bloktaki değişkene ' şeklinde atıfta bulunulabilir. . '.
Aşağıdaki örnek, bu kapsamlar hakkında daha fazla bilgi edinmenize yardımcı olacaktır.
Örnek 1: Bu örnekte, iç ve dış bloktaki değişkenlerin kapsamını görüyoruz. Ayrıca, blok etiketi kullanarak değişkenlere nasıl atıfta bulunulacağını da görüyoruz.
Aşağıdaki ekran görüntüsü, iç bloğun dış bloktaki bir değişkene blok etiketi kullanılarak atıfta bulunduğu Örnek 1'i göstermektedir.
<<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 Açıklama:
- Code 1 hattı: Dış bloğu “OUTER_BLOCK” olarak etiketliyoruz.
- Code 3 hattı: 'var1' değişkenini VARCHAR2 (30) olarak "outer_block" başlangıç değeriyle tanımlıyoruz.
- Code 4 hattı: 'var2' değişkenini VARCHAR2 (30) olarak "iç bloktan önceki değer" başlangıç değeriyle bildirme.
- Code 6 hattı: İç bloğu "INNER_BLOCK" olarak etiketliyoruz.
- Code 8 hattı: İç blokta 'var1' değişkenini VARCHAR2 (30) olarak "inner_block" başlangıç değeriyle tanımlıyoruz.
- Code 10 hattı: 'var1' değerini yazdırıyor. Etiket belirtilmediği için varsayılan olarak iç bloktan değeri alıyor ve bu nedenle 'inner_block' mesajını yazdırıyor.
- Code 11 hattı: Dış bloktaki 'var1' değişkeninin değerini yazdırıyoruz. İç blokta da aynı ada sahip bir değişken bulunduğundan, dış blok etiketine başvuruyoruz. Bu nedenle 'outer_block' mesajını yazdırıyoruz.
- Code 12 hattı: Dış bloktaki 'var2' değişkeninin değerini yazdırıyor. İç blokta bu isimde bir değişken olmadığı için, varsayılan olarak dış bloktaki değeri alıyor ve bu nedenle 'iç bloktan önceki değer' mesajını yazdırıyor.
- Dış bloktaki 'var2' değişkenine 'iç bloktan sonraki değer' değeri atanmıştır. Ancak bu atama iç bloğun tanımlanmasından sonra gerçekleştiği için bu değer iç bloğun içinde mevcut değildir.
Örnek 2: Bu örnekte, biri dış blokta, diğeri iç blokta tanımlanmış iki sayı arasındaki farkı buluyoruz. Her ikisinin de adı aynı. Blok etiketinin bu değişkenlere atıfta bulunmada nasıl faydalı olduğunu görelim.
Aşağıdaki ekran görüntüsü, aynı ada sahip dış ve iç blok değişkenleri arasındaki farkı hesaplayan Örnek 2'yi göstermektedir.
<<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 Açıklama:
- Code 1 hattı: Dış bloğu “OUTER_BLOCK” olarak etiketliyoruz.
- Code 3 hattı: 'ln_val' adlı bir değişkeni NUMBER türünde ve başlangıç değeri "5" olarak tanımlıyoruz.
- Code 5 hattı: İç bloğu "INNER_BLOCK" olarak etiketliyoruz.
- Code 7 hattı: İç blokta 'ln_val' adlı bir değişkeni NUMBER türünde ve başlangıç değeri "3" olarak tanımlıyoruz.
- Code 9 hattı: Dış ve iç bloktaki 'ln_val' değerleri arasındaki farkı yazdırıyor. . Aynı değişken adından kaynaklanan çakışmaları önlemek için bu değişkenlere "formatı" ile atıfta bulunulur.





