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.

  • 🧱 İç içe geçmiş blok: İç içe blok, başka bir bloğun yürütme veya istisna bölümünün içine yerleştirilmiş bir PL/SQL bloğudur.
  • ???? Dış ve İç: Bir dış veya üst blok, her biri tam bir PL/SQL bloğu olan birçok iç veya alt blok içerebilir.
  • 🇧🇷 Değişken Kapsamı: İç bloktan önce tanımlanan dış blok değişkenleri iç bloğun içinde görünürken, iç blok değişkenleri dış blokta görünmez.
  • ???? ️ Blok Etiketleri: Dış bloğu etiketlemek, iç bloğun etiket.değişken_adı şeklinde aynı adlı dış değişkene referans vermesini sağlar.
  • 🛡️ İstisna İzolasyonu: İç içe yerleştirme, her bloğun kendi istisnalarını ele almasına olanak tanır, böylece her şey düzenli kalır.ping Hatayı oluşturan koda yakın bir yerde hata işleme mekanizması oluşturun.
  • 🤖 Yapay Zeka Yardımı: GitHub Copilot gibi yapay zeka asistanları, etiketlenmiş iç içe bloklar oluşturur ve değişken kapsam çakışmalarını işaretler.

PL/SQL'de iç içe geçmiş iç ve dış bloklar genelinde değişken kapsamı

İç İç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.

PL/SQL dilinde, dışta bir üst blok ve içte bir alt bloktan oluşan iç içe geçmiş bir bloğun görsel temsili.

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.

İç içe geçmiş blok sözdizimi, her biri DECLARE, BEGIN ve EXCEPTION bölümlerine sahip etiketli dış ve iç blokları 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.

İç içe bloklarda değişken kapsamına örnek: Dış bloktaki bir değişkene, blok etiketi aracılığıyla atıfta bulunulmaktadır.

<<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.

Blok etiketlerini kullanarak aynı ada sahip dış ve iç blok değişkenleri arasındaki farkı hesaplama örneği

<<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.

SSS

İç içe geçmiş blok, başka bir bloğun içine yerleştirilen ve göründüğü yerde satır içi olarak çalışan anonim bir bloktur. Alt program (Prosedür veya fonksiyon), ayrı olarak saklanan ve isteğe bağlı olarak parametrelerle birlikte adıyla çağrılan, adlandırılmış, yeniden kullanılabilir bir birimdir.

Her blok kendi İSTİSNA bölümüne sahip olabilir. İç blokta oluşan bir istisna önce o blok tarafından ele alınır; eğer ele alınmazsa, dış bloğun işleyicisine iletilir. Bu, hata işlemeyi blok bazında izole etmenizi sağlar.

PL/SQL, küçük ve sabit bir sınır koymaz, bu nedenle kod blokları birçok seviye derinliğe kadar iç içe geçebilir. Pratikte, derin iç içe geçme okunabilirliği olumsuz etkiler, bu nedenle çoğu kod iç içe geçmeyi iki veya üç seviyeyle sınırlı tutar ve yeniden kullanılabilir mantığı alt programlara taşır.

DECLARE komutundan önce çift açılı parantez içinde bir isim olarak yazılan blok etiketi, bir bloğu adlandırır. Etiketler, iç kodun dış değişkeni etiket.değişken_adı şeklinde nitelendirmesine olanak tanır ve ayrıca GOTO hedefleri olarak da işlev görebilir, böylece iç içe geçmiş kodun okunmasını ve belgelendirilmesini kolaylaştırır.

Evet. İç içe bloklar, döngü, IF dalı veya prosedür gövdesi dahil olmak üzere, yürütülebilir bir ifadenin izin verildiği her yerde görünebilir. Bu, bildirimleri ve istisna işlemeyi yalnızca ihtiyaç duyulan kod bölümüyle sınırlandırmanıza olanak tanır.

İç içe yerleştirme esas olarak derleme zamanı yapılandırma aracıdır ve kendi başına anlamlı bir çalışma zamanı yükü getirmez. Okunabilirliği ve hata izolasyonunu iyileştirir. Aşırı derin iç içe yerleştirme, ham hızdan ziyade çoğunlukla bakım kolaylığına mal olur.

Evet. GitHub Yardımcı Pilotu Yorumdan alınan, DECLARE, BEGIN ve EXCEPTION bölümleri de dahil olmak üzere, dış ve iç bloklar olarak etiketlenmiş taslaklar. RevBlok etiketlerini ve değişken kapsamını inceleyerek, aynı isimli iç ve dış değişkenlerin amaçlandığı gibi çözümlenmesini sağlayın.

Yapay zekâ asistanları iç içe geçmiş blokları analiz eder ve gizli değişkenleri, niteliksiz referansları ve kapsam dışı erişimleri işaretler. Bu makine öğrenimi incelemesi, kod çalışmadan önce iç içe geçmiş bir bloğun aynı adlı yanlış değişkeni sessizce kullandığı yerleri vurgulamaktadır.

Bu yazıyı şu şekilde özetleyin: