‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫بسم الله الرحمن الرحيم‬

‫‪1‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫محتويات الكتاب ‪:‬‬
‫الموضوع‬

‫م‬
‫الفصل الول ‪ :‬مدخل إلى لغة ‪PL/SQL‬‬
‫‪1‬‬

‫•‬

‫مقدمة‬

‫‪2‬‬

‫•‬

‫مميزات اللغة‬

‫‪3‬‬

‫•‬

‫ماذا أحتاج لتعلم اللغة‬

‫‪4‬‬

‫•‬

‫كتابة البرنامج الول‬

‫•‬

‫طرق تنفيذ البرنامج‬

‫•‬

‫مكونات كتلة الترميز ) أجزاء البرنامج (‬

‫•‬

‫الكلمة المفتاحية )‪ (GOTO‬القفز الغير المشروط‬

‫•‬

‫التعليقات‬

‫‪5‬‬
‫‪6‬‬
‫‪7‬‬
‫‪8‬‬
‫‪9‬‬

‫تمارين على الفصل الول‬
‫•‬
‫الفصل الثاني ‪ :‬المتغيرات والثوابت‬

‫‪1‬‬

‫•‬

‫تعريف المتغيرات‬

‫‪2‬‬

‫•‬

‫أهمية المتغيرات‬

‫‪3‬‬

‫•‬

‫استخدامات المتغيرات‬

‫‪4‬‬

‫•‬

‫شروط تسمية المتغيرات‬

‫•‬

‫أنواع المتغيرات في اللغة‬

‫•‬

‫كيفية تعريف المتغيرات في اللغة‬

‫‪5‬‬

‫‪6‬‬

‫‪7‬‬
‫‪8‬‬

‫•‬
‫•‬

‫‪‬‬

‫البيانات الرقمية‬

‫‪‬‬

‫البيانات النصية‬

‫‪‬‬

‫البيانات الخرى‬

‫‪‬‬

‫القيود‬

‫‪‬‬

‫الداة ‪TYPE%‬‬

‫‪‬‬

‫الداة ‪ROWTYPE%‬‬

‫أمثلة على الفصل الثاني‬
‫تمارين على الفصل الثاني‬

‫‪2‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫‪3‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫‪4‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫‪5‬‬

‫الفصل الول‬
‫مدخل إلى لغة‬

‫‪QS/LP‬‬

‫‪6‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫المقدمة ‪:‬‬
‫تعتبر اللغة ‪ PL/SQL‬هي لغة البرمجة في نظام أوراكل ‪ ،‬وهي أداة برمجية قوية ‪ ،‬وكلمة ‪PL/SQL‬‬
‫اختصارًا لـ )‪ ،( Procedure Language/Structure Query Language‬وتستخدم هذه اللغة لتجهيز‬
‫نظام ‪ Oracle‬عن طريقة معالجة التسجيلت ‪ ،‬وتستخدم أيضًا في أدوات التطوير المنتجة من قبل شركة‬
‫‪ ، Oracle‬وهي تعتبر أساس برنامج بناء النماذج ‪ Oracle Forms‬و ‪ . Oracle Reports‬وتستخدم هذه‬
‫اللغة أيضًا لتعريف نموذج ما ‪ ،‬والقيام ببعض الحسابات الخاصة في تقرير ما ‪ ،‬ومن أجل التسجيلت ‪.‬‬
‫‪----------------------------------------------------------------------------------------------------‬‬

‫مزايا لغة ‪: PL/SQL‬‬
‫التكامل ‪ :‬وهذه اللغة دور أساسي بين أجزاء وأدوات أوراكل حيث يكتب بها أكواد )‪(Forms‬‬

‫‪-1‬‬

‫ويتم بها برمجة أجزاء وأدوات الوراكل ‪.‬‬
‫تحسين الداء ‪ :‬حيث يمكن لـ ‪ PL/SQL‬تحسين أداء التطبيقات وذلك من خلل ‪:‬‬

‫‪-2‬‬
‫‪-1‬‬

‫تجميع جمل ‪ SQL‬معًا في بلوك واحد ) كتلة واحدة ( وإرسالهما إلى خادم‬

‫)‪Data‬‬

‫‪ (Base‬لتنفيذها دفعة واحدة مما يؤدي إلى ارتفاع مستوى الداء عامة ‪.‬‬
‫‪-2‬‬

‫يمكن لـ ‪ PL/SQL‬العمل داخل أي جزء من أجزاء وأدوات ‪ Oracle‬وبذلك يضيف قوة‬

‫المعالجة الجرائية إلى هذه الدوات )‪ ، ............، (Oracle Forms) ،(Oracle Reports‬مما‬
‫يؤدي إلى تحسين مستوى الداء ‪.‬‬
‫تطوير البرنامج ‪ Modularized‬وذلك بـ ‪:‬‬

‫‪-3‬‬
‫‪-1‬‬

‫تجميع منطقي للبيانات داخل كتل )‪ (Blocks‬البرنامج ‪.‬‬

‫‪-2‬‬

‫الكتل المتداخلة )‪ (Nested Blocks‬تتيح العديد من المزايا ‪.‬‬

‫‪ -3‬إتاحة تقسيم المشاكل المعقدة إلى مجموعة أبسط من المشاكل يمكن حّلها ببساطة ‪.‬‬
‫‪-4‬‬

‫الستفادة من خبرات وأكواد سابقة بجمعها في شكل مكتبات )‪ (Libraries‬يمكن الستفادة‬

‫منها بين أدوات ‪ Oracle‬المختلفة ‪.‬‬
‫‪-5‬‬

‫يمكن تنفيذ كود ‪ PL/SQL‬من أي أداة من أدوات ‪ Oracle‬المختلفة ‪.‬‬

‫‪-6‬‬

‫يمكن تعريف المتغيرات والمتحولت )‪ (Variables‬التي تستقبل العديد من أنواع البيانات‬

‫المختلفة مثل الرقام والنصوص والصور والفيديو والبيانات المركبة ‪ ....‬الخ ‪.‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫‪7‬‬

‫‪ -7‬وتحتوي أيضًا على المميزات الخرى مثل أوامر التكرار والتحكم في سير البرنامج ومعالجة‬
‫الخطاء والستثناءات وووووو‪....‬الخ ‪.‬‬
‫‪----------------------------------------------------------------------------------------------------‬‬

‫ماذا أحتاج لتعّلم هذه اللغة ‪:‬‬
‫ل أحتاج إلى شيء إضافي ما دام عندي برنامج ‪ SQL*Plus‬منّزل على جهازي من قبل ‪،‬فبرنامج‬
‫‪ SQL *Plus‬يفي بالغرض لتعّلم وكتابة هذه اللغة ‪ ،‬الذي أحتاج فقط إلى المعرفة والقدرة على كتابة أوامر‬
‫‪ SQL‬وإني اجتزت هذه المادة بشكل جيد ‪.‬‬
‫‪---------------------------------------------------------------------------------------------------‬‬

‫كتابة البرنامج الول بلغة ‪: PL/SQL‬‬
‫يمكن كتابة برامج ‪ PL/SQL‬وتنفيذها من محث ‪ SQL‬ضمن برنامج ‪ . SQL *Plus‬ولكن‪ ،‬وبسبب‬
‫درجة تعقيد وطول البرامج‪ ،‬ل تعتبر آلية مفضلة الستخدام ‪ .‬إذ يفضل تطوير البرنامج في أي محرر‬
‫نصوص مثل المفكرة ‪ Notepad‬أو باني الجرائيات في نظام ‪ . Oracle‬وبعد ذلك يمكن استدعاء ملفات‬
‫البرامج ضمن ‪. SQL *Plus‬‬
‫هيا نكتب برنامجنا الول بلغة ‪ ، PL/SQL‬فلنفتح برنامج ‪ SQL *Plus‬وكتابة البرنامج التالي ‪،‬‬
‫وهذا البرنامج لطباعة رسالة )‪: (Hello‬‬
‫القائمة ‪1-1‬‬

‫فالبرنامج السابق يتألف من كتلة ترميز بلغة ‪ PL/SQL‬تحتوي على تعليمة واحدة ‪ُ .‬تظهر الرسالة )‬
‫‪. (Hello‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫‪8‬‬

‫بعض الخصائص الهامة للبرنامج السابق ‪:‬‬
‫‪-‬‬

‫يبدأ بكلمة )‪ (Begin‬وينتهي بكلمة )‪. (End‬‬

‫‪-‬‬

‫أمر الطباعة في لغة ‪ PL/SQL‬هر )‪. (DBMS_OUTPUT.PUT_LINE‬‬

‫‪-‬‬

‫تتكون كتل ترميز ‪ PL/SQL‬من تعليمات ‪ ،‬وكل تعليمة تنتهي بفاصلة منقوطة ‪.‬‬

‫‪-‬‬

‫يتم وضع )‪ (/‬في نهاية كتلة ترميز ‪ PL/SQL‬لتنفيذ تعليمات كتلة الترميز ‪.‬‬

‫‪-‬‬

‫تعتبر الكلمة المفتاحية )‪ (END‬هي الكلمة المفتاحية الوحيدة في كتلة ترميز‬

‫‪ PL/SQL‬التي تنتهي بفاصلة منقوطة ‪.‬‬
‫ملحوظة مهمة ‪:‬‬
‫ل حظ أن أول سطر في البرنامج السابق كلمة )‪، (SET SERVEROUTPUT ON‬هي تعليمة‬
‫‪ SET‬التابعة لبرنامج ‪ SQL *Plus‬المسؤولة بإظهار الرسائل المرسلة من قبل الجرائيات الموجودة في‬
‫الحزمة البرمجية ‪ ، DBMS_OUTPUT‬يجب وضعها مرة واحدة فقط ضمن جلسة العمل ‪ ،‬فإذا لم تكن‬
‫هناك استخدام للحزمة البرمجية ‪ DBMS_OUTPUT‬فل داعي إلى استخدام هذه التعليمة ‪.‬‬
‫‪---------------------------------------------------------------------------------------------------‬‬‫ل جملة‬
‫أعتقد إلى هنا ما توصلنا إلى حاجة مرتبة مفهومة ‪ ..‬فأنا لست مطالبًا بأي حاجة إلى هنا إ ّ‬
‫‪ : SET_SERVEROUTPUT ON‬يجب استخدامها مرة واحدة فقط ضمن جلسة العمل إن كان هناك‬
‫استخدام جملة ‪ DBMS_OUTPUT.PUT_LINE‬المسؤولة لتنفيذ أمر ما ‪.‬‬
‫‪---------------------------------------------------------------------------------------------------‬‬

‫طرق تنفيذ برنامج ‪: PL/SQL‬‬
‫‪-1‬‬

‫إذا كانت الكتلة البرمجية لترميز ‪ PL/SQL‬مكتوب داخل برنامج ‪ SQL *Plus‬فيمكن تنفيذها‬
‫بـوضع )‪ (/‬بعد نهاية كتلة الترميز مباشرة ‪.‬‬

‫‪-2‬‬

‫وإذا كانت الكتلة البرمجية لترميز ‪ PL/SQL‬في ملف خارجي فيمكن تنفيذها من محث‬
‫‪ SQL *Plus‬باستخدام الكلمة المفتاحية )‪ (START‬أو الرمز )@(‪ .‬وهذا النوع من الكتل‬
‫البرمجية تسمى ) إجرائيات كتل مجهولة ( ‪ .‬والشكل العام لستخدام هذه الكلمة المفتاحية ‪:‬‬
‫مسار الملف \اسم الملف ‪.‬المتداد ‪START‬‬

‫‪9‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬
‫وبعد النتهاء من تنفيذ كتلة ترميز ‪PL/SQL‬سيظهر نظام ‪ Oracle‬الرسالة التالية‪:‬‬

‫‪ PL/SQL‬تم نجاح إجراء‬
‫أو‬
‫‪PL/SQL procedure successfully completed‬‬
‫والتي تخبرنا بأنه تم تنفيذ البرنامج بنجاح ‪ ،‬أما إذا حدث أي خطأ فإن نظام ‪ Oracle‬سيصدر رسالة خطأ ‪.‬‬
‫من هنا نبدأ الجد‪---------------------------------------------------------‬علينا الصبر والمثابرة‬

‫مكونات كتلة الترميز) أجزاء البرنامج ( ‪:‬‬
‫لكتابة أي برنامج بلغة ‪ PL/SQL‬يجب علينا أن نعرف أن ترميز كتلة ‪ PL/SQL‬يتكون من أربعة‬
‫مقاطع وهي بالترتيب ‪:‬‬
‫‪ -1‬الترويسة ‪ :‬وهو مقطع اختياري في كتلة الترميز ‪ .‬ويستخدم لتحديد نوع كتلة الترميز واسمها ‪ .‬وأنواع‬
‫كتل الترميز هي ‪ anonymous procedure :‬أي إجرائيــــــة مجهـــولة السم ‪ ،‬و ‪named procedure‬‬
‫أي إجرائية لها اسم ‪ ،‬و ‪ function‬أي تابع ‪ .‬وتستخدم الترويسة مع النوعين الخيرين فقط ‪.‬‬
‫‪ -2‬التصريح ‪ :‬وهو أيضًا مقطع اختياري في كتلة الترميز‪ .‬ويحتوي على أسماء الغراض المحلية التي سيتم‬
‫استخدامها في كتلة الترميز ‪ .‬وتتضمن المتغيرات وتعاريف المؤشرات والستثناءات ‪ ،‬ويبدأ هذا المقطع‬
‫بالكلمة الفتتاحية )‪. (DECLARE‬‬
‫‪ -3‬التنفيــذ ‪ :‬وهو المقطع الجباري الوحيد في كتلة الترميز ‪ .‬ويحتوي كل التعليمات التي سيتم تنفيذها ‪،‬‬
‫والتي تتألف من تعليمات ‪ ، DML‬إجرائيات )كتل ترميز ‪ ، (PL/SQL‬توابع )كتل ترميز ‪ PL/SQL‬تعيد‬
‫قيمة ما(‪،‬وبرامج جزئية مسبقة البناء‪ .‬ويبدأ هذا المقطع بالكلمة الفتتاحية )‪. (BEGIN‬‬
‫‪ -4‬الستثناءات ‪ :‬وهو مقطع اختياري ‪ .‬ويستخدم للتقاط ومعالجة أي خطأ يحدث أثناء التعليمات الموجودة‬
‫في المقطع التنفيذي ‪ .‬ويبدأ هذا المقطع بالكلمة المفتاحية )‪. (EXCEPTION‬‬
‫ملحوظة ‪:‬‬
‫* ويلي ذلك كله الكلمة المفتاحية )‪ (END‬لنهاء كتلة الترميز ‪ ،‬وهي الكلمة المفتاحية الوحيدة التي‬
‫تنتهي بفاصلة منقوطة ‪.‬‬
‫* ولتنفيذ كتلة الترميز يتم وضع الرمز )‪ slash (/‬بعد نهاية كتلة الترميز ‪.‬‬

‫‪10‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬
‫والشكل العام لكتلة الترميز ‪:‬‬

‫‪DECLARE‬‬
‫جزء التصريح والتعريف( هنا يتم وضع المتغيرات وتعاريف المؤشرات والستثناءات(‬
‫‪BEGIN‬‬
‫)هنا يتم وضع التعليمات التي سيتم تنفيذهـا )جزء التنفيذ‬
‫‪EXCEPTION‬‬
‫جزء الستثناءات( هنا يتم وضع الستثناءات(‬
‫نهاية الكتلة البرمجية( هذه الكلمة يجب وضعها في نهاية كتلة الترميز لنهاء الكتلة(‬

‫;‪END‬‬

‫)وهذا الرمز يتم وضعه لتنفيذ كتلة الترميز )تنفيذ الكتلة البرمجية‬

‫‪/‬‬

‫سوف نأخذ المثال التالي ‪:‬‬
‫كتلة برمجية يسترجع اسم الموظف الذي يحمل الرقم )‪ (7782‬من جدول الموظفين )‪ ، (EMP‬ثم‬
‫طباعته‪،‬وإذا كان هناك حدوث أي خطأ على التعليمات التنفيذية سيظهر رسالة )‪. (ERROR OCCURED‬‬
‫تعريف متغير من النوع الحرفي طوله ‪30‬‬
‫حرفًا‬

‫هنا جملة الستعلم عن اسم الموظف الذي يحمل الرقم ‪7782‬‬
‫وطباعته‬

‫تعليمات الستثاء‬
‫هذا اسم الموظف المسترجع من جملة الستعلم‬

‫‪----------------------------------------------------------------------------------------------------‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫‪11‬‬

‫الكلمة المفتاحية )‪ (GOTO‬القفز الغير المشروط ‪:‬‬
‫تستخدم الكلمة المفتاحية )‪ (GOTO‬لجراء قفز غير مشروط والنتقال من مقطع من كتلة الترميز‬
‫إلى مقطع آخر‪ .‬ولستخدام هذه الكلمة المفتاحية هناك قواعد وتعليمات يجب إتباعها وهي بالترتيب ‪:‬‬
‫‪-1‬‬

‫تعريف العناوين ‪ :‬وذلك بوضع إشارتي )>>( قبل اسم العنوان وإشارتي )<<( بعد اسم‬

‫العنوان ‪.‬‬
‫‪-2‬‬

‫يتم استخدام الكلمة المفتاحية )‪ (GOTO‬ثم وضع اسم العنوان المراد القفز إلى هناك بعد )‬

‫‪. (GOTO‬‬
‫ملحوظة ‪:‬‬
‫س ‪/‬ما المقصود بتعريف العناوين الذي أشرنا إليه في الفقرة رقم واحد ؟‬
‫ج ‪/‬تعرف العناوين بأنها وسائل تستخدم لوضع علمات لمقاطع كتلة الترميز ‪.‬‬
‫سنأخذ المثال التالي ‪:‬‬
‫كتلة برمجية تستخدم الكلمة المفتاحية )‪ (GOTO‬لقفز غير مشروط من مقطع إلى مقطع آخر ‪ ،‬تحتوي ثلث‬
‫تعليمات تنفيذية ‪ ،‬يتم تنفيذ التعليمة الوسطى ثم الولى ثم التعليمة الخيرة ‪:‬‬

‫الشرح ‪:‬‬

‫عند بداية تنفيذ البرنامج يحصل‬
‫الجملة التالية )‪(goto middle‬‬
‫فيذهب إلى المقطع )‪(middle‬‬
‫وينفذ التعليمات ثم يحصل الجملة‬
‫التالية )‪ (goto top‬فيذهب إلى‬
‫المقطع )‪ (top‬وينفذ التعليمات ثم‬
‫يحصل الجملة التالية‬
‫)‪ (goto bottom‬فيذهب إلى‬
‫المقطع )‪ (bottom‬ثم يحصل‬
‫كلمة )‪ (end‬فينهي البرنامج ‪.‬‬

‫ملحوظة ‪:‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫‪12‬‬

‫يوصي العديد من الخبراء في هذا المجال بعدم استخدام التعليمة )‪ ، (GOTO‬فهي تجعل فقدان‬
‫ل ‪ .‬وهي للستخدام في بعض الحالت النادرة التي يمكن أن تجعل البرنامج‬
‫السيطرة على التطبيقات أمرًا سه ً‬
‫أسهل وأبسط ‪.‬‬

‫التعليقات ‪:‬‬
‫كأي لغات البرمجة الخرى يمكن إدخال التعليقات ضمن كتلة الترميز ‪ ،‬ويوضع المبرمج مثل هذه‬
‫التعليقات لتسهيل أمره وقت مراجعته وتطويره للبرنامج بعد فترة زمنية ‪ ،‬ول تؤثر هذه التعليقات في حجم‬
‫البرنامج أبدًا ‪ .‬ويوجد أداتان لكتابة هذه التعليقات ‪:‬‬
‫‪ -1‬لكتابة تعليق سطرًا واحدا ‪ ً:‬يتم وضع إشارتي ناقص )‪ (--‬في بداية السطر الذي نرغب بوضعه‬
‫كتعليق ‪.‬‬
‫‪-2‬‬

‫ولكتابة تعليق عدة أسطر ‪ :‬يتم وضع الرمز )‪ (*/‬في بداية التعليق ‪ ،‬ووضع الرمز )*‪ (/‬في‬
‫نهاية التعليق ‪.‬‬

‫‪----------------------------------------------------------------------------------------------------‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫‪13‬‬

‫‪14‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬
‫تمارين على الفصل الول‬
‫السؤال الول ‪:‬‬
‫ضع علمة صح )( أما العبارة الصحيحة وعلمة )( خطأ أمام العبارة الخاطئة ‪:‬‬
‫‪ -1‬لغة ‪ PL/SQL‬هي أساس البرمجة في نظام أوراكل ‪.‬‬

‫)‬

‫(‬

‫‪ -2‬من مزايا لغة ‪ PL/SQL‬التكامل فقط ‪.‬‬

‫)‬

‫(‬

‫‪ -3‬ل يمكن تنفيذ أكواد ‪ PL/SQL‬من أي أداة من أدوات أوراكل المختلفة ‪.‬‬

‫)‬

‫(‬

‫‪ -4‬يمكن كتابة أكواد ‪ PL/SQL‬في محرر نصوص ثم استدعاؤه من محث ‪. SQL *Plus‬‬

‫)‬

‫(‬

‫‪ -5‬الكلمة المفتاحية الوحيدة التي تنتهي بفاصلة منقوطة هي )‪. (End‬‬

‫)‬

‫(‬

‫‪ -6‬ولتنفيذ كتلة الترميز يتم وضع الرمز )*( ‪ star‬بعد نهاية كتلة الترميز ‪.‬‬

‫)‬

‫(‬

‫‪ -7‬المقطع الجباري الوحيد هو المقطع التنفيذي )‪.(Begin‬‬

‫)‬

‫(‬

‫‪ -8‬الكلمة )‪(GOTO‬تشير إلى القفز المشروط ‪.‬‬

‫)‬

‫(‬

‫السؤال الثاني ‪:‬‬
‫أجب عما يأتي ‪:‬‬
‫‪ -1‬إذا كان ملف كتلة الترميز مكتوب في ملف خارجي ‪ .‬فكيف يتم استدعاؤه من محث ‪ SQL *Plus‬؟‬
‫_______________________________________________________________‬
‫_______________________________________________________________‬
‫‪ -2‬ما هو الرمز المستخدم في كتابة تعليق لسطر واحد فقط ؟ وما هو الرمز المستخدم في كتابة عدة أسطر؟‬
‫________________________________________________________________‬
‫________________________________________________________________‬
‫‪ -3‬أكتب كتلة برمجية يتم فيه طباعة النص التالي )‪ (Welcome To PL/SQL‬؟‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫الفصل الثاني‬
‫المتغيرات والثوابت‬

‫‪15‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫‪16‬‬

‫المتغيرات والثوابت ‪:‬‬
‫تعريف المتغيرات ‪:‬‬
‫إن المتغير هو موقع تخزين ‪ -‬من أجل حفظ قيمة ‪ -‬يمكن أن يتم إسناد قيمة إليه ‪ ،‬وسمي متغبر لنه‬
‫يمكن أن تتغير قيمته أثناء تنفيذ البرنامج ‪.‬‬
‫أهمية المتغيرات ‪:‬‬
‫‪-1‬‬

‫حجز مكان في الذاكرة للمتغير ‪.‬‬

‫‪-2‬‬

‫إعلم المترجم بنوع البيانات التي يمكن أن تخزن في المتغير ‪.‬‬

‫استخدامات المتغيرات ‪:‬‬
‫‪-1‬‬

‫تخزين مؤقت للبيانات ‪.‬‬

‫‪-2‬‬

‫التعامل مع قيم مخزنة ‪.‬‬

‫‪-3‬‬

‫إعادة استخدام البيانات نتيجة تغيرات داخل وأثناء البرنامج ‪.‬‬

‫‪-4‬‬

‫الختصار وسهولة التعديل والصيانة وذلك من استخدام )‪ (type%‬و )‪ (rowtype%‬سيأتي‬

‫شرحها لحقًا ‪ ،‬و من خللهما يمكن تعريف متغير حسب نوع عمود أو صف في قاعدة البيانات مما‬
‫يتيح قدر كبير من المرونة دون التقيد بنوع معين من البيانات ‪.‬‬
‫شروط تسمية المتغيرات ‪:‬‬
‫‪-1‬‬

‫اسم المتغير يجب أن يبدأ بحرف ‪.‬‬

‫‪-2‬‬

‫يمكن أن يحتوي اسم المتغير على حروف وأعداد أو شرطة سفلية أو الحرف ‪. $‬‬

‫‪-3‬‬

‫ل يحتوي اسم المتغير على رموز خاصة ‪.‬‬

‫‪-4‬‬

‫ل يحتوي اسم المتغير على مسافات ‪.‬‬

‫‪-5‬‬

‫ل يكون اسم المتغير ضمن السماء المحجوزة في اللغة مثل ‪ ... Declare, for, if‬الخ‪.‬‬

‫‪-6‬‬

‫ل ‪ x‬ل يختلف عن ‪. X‬‬
‫لغة ‪ PL/SQL‬ل تفرق بين الحروف الكبيرة والصغير فمث ً‬

‫‪-7‬‬

‫يفضل أن يكون اسم المتغير ذو معنى ‪.‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫‪17‬‬

‫أنواع المتغيرات في لغة ‪: PL/SQL‬‬
‫تنقسم المتغيرات إلى قسمين أساسين ‪:‬‬
‫‪-1‬‬

‫متغيرات ‪: PL/SQL‬‬

‫وتحتوي على عدة أنواع منها ‪:‬‬

‫‪-2‬‬

‫‪-1‬‬

‫المفردة ‪.Scalar‬‬

‫‪-2‬‬

‫المركبة)المعقدة( ‪. Composite‬‬

‫‪-3‬‬

‫المشار بها ) عناوين ( ‪. Reference‬‬

‫‪-4‬‬

‫ذات الحجام الكبيرة ‪. (LOB(Large Object‬‬

‫متغيرات ليست ‪: PL/SQL‬‬

‫مثل متغيرات ‪. host , Bind :‬‬
‫فمـــــا علينــــــا من هذه النــــواع في هذا المنهج إل الفقـــــرة الولـــــى )المفـــــردة( ‪.‬‬
‫كيفية تعريف المتغيرات في لغة ‪: PL/SQL‬‬
‫يتم تعريف المتغيرات في لغة ‪ PL/SQL‬في جزء التصريح والشكل العام للتعريف هو ‪:‬‬
‫;)‪Variable_name [CONSTANT] datatype (precision‬‬
‫;‬

‫اسم المتغير‬

‫]قيـــــد[ )الدقة أو الطول( نوع البيانات‬

‫ملحوظة مهمة ‪:‬‬
‫‪-1‬‬

‫يجب أن ينتهي التعريف بفاصلة منقوطة ‪.‬‬

‫‪-2‬‬

‫اسم المتغير ونوعه إجباريان عند تعريف أي متغير ‪.‬‬

‫مثل ما قلنا أن من أنواع المتغيرات في هذه اللغة )المفردة( فما معنى المفردة ؟‬
‫المفردة المقصود منها هنا ‪ :‬أن ل يحتوي قيمة المتغير سوى قيمة واحدة فقط ‪ .‬مثل ‪:‬‬
‫‪-1‬‬

‫البيانات الرقمية ‪. Number :‬‬

‫‪-2‬‬

‫البيانات النصية ‪. Char , Varchar2 :‬‬

‫‪-3‬‬

‫البيانات البولية ‪. Boolean :‬‬

‫‪-4‬‬

‫البيانات الزمنية )التاريخ( ‪. Date :‬‬

‫‪-5‬‬

‫الستثناءات ‪ . Exception :‬وغيرها ‪.‬‬

‫سنأخذ كل أنواع البيانات السابقة وكيفية التعريف بالتفصيل ‪.‬‬

‫‪18‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫تعريف المتغيرات الرقمية ‪:‬‬
‫يمكن أن تتضمن البيانات الرقمية وسيطين اثنين ‪ :‬الدقة )الطول الكامل للقيمة( و القيمة العشرية )عدد‬
‫الرقام الممكن وضعها إلى يسار أو يمين الفاصلة العشرية ‪.‬‬
‫البيانات الرقمية تنقسم إلى قسمين ‪:‬‬
‫‪-1‬‬

‫البيانات الرقمية الصحيحة ويمكن تعريفه بالشكل التالي ‪:‬‬

‫‪-2‬‬

‫البيانات الرقمية ذات الفاصلة العشرية ويمكن تعريفه بالشكل التالي‪:‬‬

‫;)‪Salary integer(3‬‬
‫فهذا المتغير قيمته عددا دون تحديد القيمة العشرية ويمكن أن تحتوي هذه القيمة ثلث أرقام‬
‫عشرية وثلث أرقام عشرية إلى اليسار ‪ ،‬بحيث ل يتجاوز الطول العظمي أكثر من ثلثة‬
‫مواضع ‪.‬‬

‫فهذا المتغير طوله ‪ 3‬منها عددان إلى اليمين بعد الفاصلة العشرية‬

‫;)‪age number(3‬‬

‫;)‪summary number(3,2‬‬

‫ملحوظة ‪:‬‬
‫* يتم إعطاء قيمة افتراضية للدقة مقدارها ‪. 38‬‬
‫تعريف المتغيرات النصية ‪:‬‬
‫يمكن تعريف البيانات النصية بشكل عادي ‪ ،‬ويتكون البيانات النصية من نمطين ‪:‬‬
‫‪-1‬‬

‫‪ . CHAR 2- VARCHAR2‬والشكل العام لتعريف البيانات النصية ‪:‬‬
‫;)‪Job char(3‬‬
‫;)‪Name varchar2(30‬‬
‫;)(‪X char‬‬

‫ملحوظة ‪:‬‬
‫‪-1‬‬

‫تحتوي التعاريف من النوع ‪ char‬فراغات في المواضع غير المشغولة ‪.‬‬

‫‪-2‬‬

‫ل يمكن اعتبار الفراغات والقيم الفارغة نفس الشيء وحتى ل يمكن إجراء أي مقارنة بينهما ‪.‬‬

‫‪-3‬‬

‫يعتبر الطول الفتراضي عندما ل يتم تحديد الطول لنمط البيانات ‪ char‬هو ‪ ، 1‬والطول‬

‫العظمي هو ‪.32767‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬
‫‪-4‬‬

‫‪19‬‬

‫يجب تحديد الطول عند تعريف متغير لنمط البيانات ‪ ، varchar2‬والطول العظمي هو‬

‫‪. 32767‬‬
‫‪-5‬‬

‫تسمح اللغة بتعريف متغيرات من النماط ‪ char‬و ‪ varchar2‬بأطوال أعظمية أكبر ‪.‬‬

‫تعريف المتغيرات من أنواع أخرى ‪:‬‬
‫‪-1‬‬

‫‪ : Boolean‬يستخدم لتسجيل حالة ما ‪ ،‬ويمكن أن يأخذ القيمة ‪ True‬أو ‪ False‬أو ‪. Null‬‬
‫‪:‬مثل ; ‪Yes Boolean‬‬

‫‪-2‬‬

‫‪ : Date‬يستخدم لتسجيل قيم التاريخ ‪.‬‬

‫‪-3‬‬

‫‪ : Exception‬يستخدم لتعريف استثناء مخصص أو مقبض للخطأ ‪.‬‬

‫‪:‬مثل‬

‫; ‪s_day date‬‬

‫‪:‬مثل ;‪e_error exception‬‬
‫تعاريف القيود ‪:‬‬
‫يمكن وضع القيود على المتغيرات معّرفة في كتلة الترميز ‪ ،‬وُيعرف القيد بأنه شرط يتم وضعه على‬
‫المتغير‪ .‬ويوجد نوعان شائعان من القيود وهما ‪:‬‬
‫‪-1‬‬

‫‪ : CONSTANT‬وهذا القيد يتأكد من أن القيمة لم تتغير بعد نسب قيمة أولية للمتغير ‪ .‬فإذا‬
‫حاولت تعليمة ما تغيير القيمة ‪ ،‬سيحدث خطأ ‪.‬‬
‫‪ : NOT NULL‬هذا القيد يتأكد من أن المتغير يحتوى على دائمًا على قيمة ‪ ،‬فإذا‬

‫‪-2‬‬

‫حاولت تعليمة ما نسب قيمة فارغة إلى المتغير ‪ ،‬سيحدث خطأ ‪.‬‬
‫نسب قيم للمتغيرات ‪:‬‬
‫توجد طريقتان لنسب القيم للمتغيرات في لغة ‪: PL/SQL‬‬
‫‪-1‬‬

‫معامل النسب )‪ (=:‬مثل ‪:‬‬

‫‪-2‬‬

‫الكلمة المفتاحية )‪ (INTO‬وتستخدم في تعليمة )‪ (SELECT‬و )‪ ، (FETCH‬وسيأتي‬

‫;‪Salary number := 15‬‬
‫شرحه بالتفصيل لحقًا ‪.‬‬

‫‪20‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫تعريف متغيرات من نوع تسجيلة ‪ PL/SQL‬ومتغيرات المجموعات ‪:‬‬
‫ميزة أضيفت في لغة ‪ PL/SQL‬وهي تعريف متغيرات من نوع تسجيلة ومتغيرات المجموعات‬
‫بمعنى ‪ :‬يمكن تعريف متغير على أساس تعريف عمود أو صف بأكمله في جدول بقاعدة البيانات أو متغير‬
‫سبق تعريفه ‪ ،‬فالمتغير الجديد يأخذ نفس نوع بيانات عمود جدول في قاعدة البيانات ‪ ،‬وبذلك تتيح قدر‬
‫كبير من المرونة في تعريف المتغيرات ‪ ،‬وأيضًا يوفر الكثير من الوقت للمبرمج ‪ ،‬وأيضًا اختصار‬
‫البرنامج ‪.‬‬
‫الفوائد الهامة من هذه الميزة ‪:‬‬
‫‪-1‬‬

‫يستطيع المطّور أن يعرف بشكل آلي متغير بنفس مواصفات بيانات عمود جدول أو‬
‫متغير من نوع مؤشر ‪ ،‬وبدون معرفة المواصفات لبيانات العمود أو المؤشر ‪.‬‬

‫‪-2‬‬

‫يستطيع المطّور إعداد المتغيرات لمؤشر ما أو تسجيلة جدول بتعليمة واحدة ‪ .‬وستمتلك‬
‫المتغيرات نفس المواصفات للجدول أو متغيرات المؤشر ‪.‬‬

‫* الخاصية أو الداة )‪: (TYPE%‬‬
‫تعتبر الداة )‪ (TYPE%‬أول أداة لتعريف متغير مجموعة ‪ ،‬والتي تسمح بتعريف متغير بنفس‬
‫مواصفات عمود جدول بقاعدة البيانات ‪ ،‬والشكل العام للتعريف بهذه الداة ‪:‬‬
‫; ‪VARIABLE_NAME TABLE_CURSOR_NAME.COLUMN_NAME%TYPE‬‬
‫; ‪%TYPE‬اسم المتغير اسم الجدول أو المؤشر‬

‫اسم العمود‬

‫ل على ذلك ‪:‬‬
‫وفي ما يلي نأخذ مثا ً‬
‫كتلة برمجية لعرض اسم الموظف وراتبه من جدول الموظفين )‪ ، (EMP‬بحيث يكون رقم الموظف‬
‫يساوي ‪. 7782‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫‪21‬‬

‫دعنا الن نشرح المثال السابق بالتفصيل ‪:‬‬
‫السطر الول ‪ :‬كلمة مفتاحية )‪ (Declare‬تحدد جزء التصريح والتعريف ‪.‬‬
‫السطر الثاني ‪ :‬تعريف متغير واسمه )‪(name‬ونوع بياناته نفس نوع بيانات عمود)‪(ename‬من جدول)‬
‫‪.(emp‬‬
‫السطر الثالث ‪ :‬تعريف متغير واسمه )‪(salary‬ونوع بياناته نفس نوع بيانات عمود)‪(sal‬من جدول)‪.(emp‬‬
‫السطر الرابع ‪ :‬كلمة مفتاحية )‪ (Begin‬تحدد جزء التنفيذ ‪.‬‬
‫السطر الخامس ‪ :‬جملة استعلم )‪ (select‬يسترجع السم والراتب )‪ (ename‬و)‪. (sal‬‬
‫السطر السادس ‪ :‬كلمة مفتاحية )‪ (into‬لسناد قيم للمتغيرات التي تم تعريفها في جزء التصريح )‪ (ename‬و‬
‫)‪. (salary‬‬
‫السطر السابع ‪ :‬أشرنا إلى استرجاع السجل يكون من جدول الموظفين )‪. (emp‬‬
‫السطر الثامن ‪ :‬جملة الشرط لسترجاع السجل بحيث يكون رقم الموظف )‪ (empno‬يساوي )‪. (7782‬‬
‫السطر التاسع ‪ :‬جملة الطباعة بحيث يطبع اسم الموظف وراتبه المسترجع من جملة الستعلم السابقة ‪.‬‬
‫السطر العاشر ‪ :‬كلمة مفتاحية )‪ (End‬لنهاء البرنامج أو كتلة الترميز وتنتهي بفاصلة منقوطة ‪.‬‬
‫السطر الحادي عشر ‪ :‬يدل الرمز )‪ (/‬على تنفيذ البرنامج أو كتلة الترميز السابقة ‪.‬‬
‫ملحوظة ‪:‬‬
‫‪.1‬‬

‫السطر التاسع ‪ :‬نرى الرمز )||( ‪ ،‬ويستخدم لطباعة قيمة أكثر من متغير أو جملة في نفس‬

‫جملة الطباعة ‪.‬‬
‫‪.2‬‬

‫لطباعة نص يجب وضعه بين علمتي تنصيص مفردة ‪.‬‬

‫‪22‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫* الخاصية أو الداة )‪: (ROWTYPE%‬‬
‫الداة )( ‪ ،‬وهي ثاني أداة لتعريف متغير مجموعة ‪ ،‬وتستخدم لتأسيس مصفوفة من المتغيرات مبنية‬
‫على العمدة الموجودة في مؤشر ما أو جدول ما ‪ .‬والشكل العام للتعريف بهذه الداة ‪:‬‬
‫; ‪ARRAY_NAME TABLE/CURSOR_NAME%ROWTYPE‬‬
‫; ‪%ROWTYPE‬اسم المتغير‬

‫اسم الجدول أو المؤشر‬

‫ل على ذلك ‪:‬‬
‫وفي ما يلي نأخذ مثا ً‬
‫كتلة برمجية لعرض اسم الموظف وراتبه ووظيفته من جدول الموظفين )‪ ، (EMP‬بحيث يكون رقم‬
‫الموظف يساوي ‪ ). 7782‬باستخدام الداة ‪: (ROWTYPE%‬‬

‫شرح البرنامج السابق ‪:‬‬
‫هو نفس البرنامج الذي كتبنا في الداة )‪ (TYPE%‬ولكن يختلف هنا في بعض الفقرات عن البرنامج‬
‫السابق من حيث الكتابة ‪:‬‬
‫‪-1‬‬

‫تم تعريف متغير )‪ (x‬تأخذ نفس نوع أعمدة جدول الموظفين )‪. (emp‬‬

‫‪-2‬‬

‫جملة الطباعة في السطر الثامن يختلف عن السابق فعند طباعة قيمة متغير يجب وضع اسم‬

‫ل‪:‬‬
‫المتغير ثم نقطة ثم اسم العمود في الجدول كالشكل التالي مث ً‬
‫;) ‪DBMS_OUTPUT.PUT_LINE ('Name: ' || x.ename‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫‪23‬‬

‫ملحوظة ‪:‬‬
‫ل واحدًا فقط ‪ ،‬وإذا استرجع أكثر من سجل سيحدث‬
‫كل ما سبق تسمى المؤشرات الضمنية ‪ ،‬وتسترجع سج ً‬
‫خطأ ‪.‬‬

‫أمثلة الفصل الثاني ‪:‬‬
‫‪-1‬‬

‫كتلة برمجية تطبع نص وقيمة المتغير )‪: X) = 1500‬‬

‫‪-2‬‬

‫كتلة برمجية تسترجع اسم الموظف وراتبه واسم القسم الذي يشتغل فيه وطباعته ‪ ،‬بحيث يكون‬

‫رقم الموظف يساوي )‪ : (7782‬باستخدام الداة )‪: (TYPE%‬‬

‫‪-3‬‬

‫كتلة برمجية يتم فيه طباعة اسم الموظف ووظيفته الذي يحمل الرقم )‪ . (7782‬ولكن باستخدام‬

‫الداة )‪: (ROWTYPE%‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫تمارين الفصل الثاني ‪:‬‬
‫السؤال الول ‪:‬‬
‫أجب عما يأتي ‪:‬‬
‫‪-1‬‬

‫ماذا تعني كلمة المتغير ؟‬

‫‪-2‬‬

‫ما هي أهمية المتغيرات ؟‬

‫أ‪-‬‬
‫ب‪-‬‬
‫‪-3‬‬

‫أذكر شروط تسمية المتغيرات ؟‬

‫أ‪-‬‬
‫ب‪-‬‬
‫ج‪-‬‬
‫د‪-‬‬
‫هـ ‪-‬‬
‫و‪-‬‬
‫‪ - 4‬ما هي أنواع المتغيرات في لغة ‪ PL/SQL‬؟‬
‫أ‪-‬‬
‫ب‪-‬‬

‫‪24‬‬

‫‪25‬‬

‫كتاب تصميم قواعد البيانات ‪PL-SQL‬‬

‫السؤال الثاني ‪:‬‬
‫امل الفراغات التالية ‪:‬‬
‫‪.1‬‬

‫من أنماط البيانات النصية ‪ char‬و ‪..........................‬‬

‫‪.‬‬

‫‪.2‬‬

‫يمكن تعريف المتغيرات في جزء ‪...........................‬‬

‫‪.‬‬

‫‪.3‬‬

‫تستخدم الداة )‪(ROWTYPE%‬‬

‫لـــ ‪. ..........................................................................‬‬
‫‪.4‬‬

‫القيمة الفتراضية من نمط البيانات )‪ (CHAR‬عندما ل يتم تحديد الطول‬

‫هو ‪. ................‬‬
‫‪.5‬‬

‫‪ ..........‬الطول الكامل للقيمة ‪ ،‬و ‪ ........................‬عدد الرقام الممكن وضعها إلى يمين‬

‫أو يسار الفاصلة العشرية ‪.‬‬
‫‪.6‬‬

‫‪ .......................‬يستخدم للبيانات البولية أو المنطقية ‪.‬‬

‫‪.7‬‬

‫‪ DATE‬يستخدم لــ ‪. .......................................‬‬

‫السؤال الثالث ‪:‬‬
‫‪-1‬‬

‫اكتب كتلة برمجية لستعراض تاريخ التعيين للموظف الذي اسمه )‪ (KING‬؟‬

‫‪-2‬‬

‫اكتب كتلة برمجية لحساب عدد الموظفين في جدول الموظفين )‪ (EMP‬؟‬

‫‪-3‬‬

‫اكتب كتلة برمجية تقوم فيه تعريف متغيرين من النوع الرقمي وتنسب قيمة للول )‪(50‬‬

‫والثاني )‪ ، (30‬ثم تقوم بجمع العددين وطباعة الناتج ؟‬

Sign up to vote on this title
UsefulNot useful