نطاق PL/SQL المتغير والكتلة الخارجية الداخلية: البنية المتداخلة
⚡ ملخص ذكي
تتيح لك الكتل المتداخلة في لغة PL/SQL وضع كتلة داخل أخرى، مما يسمح لك بفصل المنطق المعقد وعزل معالجة الاستثناءات. كما أن فهم نطاق المتغيرات بين الكتل الخارجية والداخلية، واستخدام تسميات الكتل، يحافظ على وضوح المتغيرات التي تحمل نفس الاسم.

ما هي الكتل المتداخلة Oracle?
In PL / SQLيمكن تضمين كل كتلة داخل كتلة أخرى. تُسمى هذه الكتلة بالكتلة المتداخلة. تُعد الكتل المتداخلة شائعة جدًا عند الرغبة في تنفيذ عملية معينة مع الحفاظ علىping الكود الخاص بتلك العملية في حاوية (كتلة) منفصلة.
يساعد مفهوم الكتل المتداخلة المبرمج على تحسين قابلية القراءة من خلال فصل المنطق المعقد إلى كتل فردية، ويسمح بـ استثناء لكل كتلة يتم التعامل معها داخل الكتلة الخارجية الرئيسية.
هيكل الكتلة المتداخلة
يمكن تضمين كتلة داخل كتلة أخرى. يمكن تضمينها إما في جزء التنفيذ أو في جزء معالجة الاستثناءات، ويمكن تسمية هذه الكتل أيضًا. يمكن أن تحتوي كتلة خارجية واحدة على العديد من الكتل الداخلية. كل كتلة داخلية هي في حد ذاتها كتلة بل/SQLلذا، فإن جميع خصائص ومميزات الكتلة الداخلية هي نفسها خصائص ومميزات الكتلة الخارجية. الكتلة الأصلية هي الكتلة الرئيسية، والكتلة الفرعية هي الكتلة المتداخلة.
تُظهر الصورة أدناه تمثيلاً تصويرياً لهيكل الكتلة المتداخلة، حيث تكون الكتلة الأصلية هي الكتلة الرئيسية والكتلة الفرعية هي الكتلة المتداخلة.
فيما يلي صيغة الكتلة المتداخلة. تُظهر لقطة الشاشة أدناه صيغة الكتلة المتداخلة مع تسمية الكتلتين الخارجية والداخلية.
بناء جملة الكتلة المتداخلة
<<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;
- يوضح التركيب أعلاه الكتلة المتداخلة التي تحتوي على ما مجموعه كتلتين.
- تم تصنيف هذه الكتل على أنها "الكتلة الخارجية" و "الكتلة الداخلية".
النطاقات في الكتلة المتداخلة: النطاق المتغير
في الكتل المتداخلة، يجب فهم نطاق كل كتلة ومدى رؤيتها بوضوح قبل استخدامها. خاصةً في الكتلة الداخلية، حيث تكون عناصر من كلٍّ من الكتلة الخارجية والداخلية مرئية، لذا فإن فهم هذا الأمر ضروري.
تلخص النقاط التالية النطاقات في كتل متداخلة.
- العناصر المعلنة في الكتلة الخارجية، والقيمة المحددة قبل تعريف الكتلة الداخلية، تكون مرئية داخل الكتلة الداخلية.
- العناصر المُعلنة في الكتلة الداخلية غير مرئية في الكتلة الخارجية، بل هي مرئية فقط داخل الكتلة الداخلية.
- يمكن أن تحتوي الكتلة الخارجية والكتلة الداخلية على متغير بنفس الاسم
- في حالة المتغيرات التي تحمل نفس الاسم، يشير الجزء الداخلي افتراضيًا إلى المتغير المعلن عنه في الجزء الداخلي فقط.
- إذا أرادت الكتلة الداخلية الإشارة إلى متغير الكتلة الخارجية الذي يحمل نفس اسم متغير الكتلة الداخلية، فيجب تسمية الكتلة الخارجية، ويمكن الإشارة إلى متغير الكتلة الخارجية باسم ' . '.
يساعدك المثال أدناه على فهم المزيد حول هذه النطاقات.
مثال 1: في هذا المثال، نرى نطاق المتغيرات في الكتلة الداخلية والخارجية. كما نرى كيفية الإشارة إلى المتغيرات باستخدام تسمية الكتلة.
تُظهر لقطة الشاشة أدناه المثال 1، حيث يشير المربع الداخلي إلى متغير مربع خارجي باستخدام تسمية المربع.
<<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 التفسير:
- Code السطر 1: تسمية الكتلة الخارجية بـ "OUTER_BLOCK".
- Code السطر 3: تعريف متغير 'var1' كـ VARCHAR2 (30) بقيمة ابتدائية هي "outer_block".
- Code السطر 4: تعريف متغير 'var2' كـ VARCHAR2 (30) بقيمة ابتدائية هي "القيمة قبل الكتلة الداخلية".
- Code السطر 6: تسمية الكتلة الداخلية بـ "INNER_BLOCK".
- Code السطر 8: تعريف متغير 'var1' في الكتلة الداخلية كـ VARCHAR2 (30) بقيمة ابتدائية هي "inner_block".
- Code السطر 10: طباعة قيمة 'var1'. بما أنه لم يتم ذكر أي تسمية، فإنه يأخذ القيمة من الكتلة الداخلية بشكل افتراضي، وبالتالي تتم طباعة رسالة 'inner_block'.
- Code السطر 11: طباعة قيمة المتغير 'var1' الموجود في الكتلة الخارجية. بما أن الكتلة الداخلية تحتوي على متغير بنفس الاسم، فإننا نشير إلى تسمية الكتلة الخارجية. وبالتالي، تتم طباعة الرسالة 'outer_block'.
- Code السطر 12: طباعة قيمة المتغير 'var2' الموجود في الكتلة الخارجية. بما أنه لا يوجد متغير بهذا الاسم في الكتلة الداخلية، فإنه يأخذ القيمة من الكتلة الخارجية افتراضيًا، وبالتالي تتم طباعة رسالة "القيمة قبل الكتلة الداخلية".
- يتم إسناد القيمة "value after inner block" إلى المتغير 'var2' في الكتلة الخارجية. ولكن هذا الإسناد يحدث بعد تعريف الكتلة الداخلية، لذا فإن هذه القيمة غير موجودة داخل الكتلة الداخلية.
مثال 2: في هذا المثال، نجد الفرق بين عددين، أحدهما مُعرَّف في الكتلة الخارجية والآخر في الكتلة الداخلية. كلاهما يحمل نفس الاسم. دعونا نرى كيف يُفيدنا اسم الكتلة في الإشارة إلى هذه المتغيرات.
تُظهر لقطة الشاشة أدناه المثال 2، الذي يحسب الفرق بين متغيرات الكتلة الخارجية والداخلية التي تحمل نفس الاسم.
<<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 التفسير:
- Code السطر 1: تسمية الكتلة الخارجية بـ "OUTER_BLOCK".
- Code السطر 3: تعريف متغير 'ln_val' كرقم بقيمة ابتدائية "5".
- Code السطر 5: تسمية الكتلة الداخلية بـ "INNER_BLOCK".
- Code السطر 7: تعريف متغير 'ln_val' في الكتلة الداخلية كرقم مع القيمة الأولية "3".
- Code السطر 9: طباعة الفرق في قيمة 'ln_val' بين الكتلة الخارجية والداخلية. . يتم استخدام تنسيق "" للإشارة إلى هذه المتغيرات لتجنب التعارضات الناتجة عن نفس اسم المتغير.




