Upload
mahmoud-el-qahwagy
View
267
Download
14
Embed Size (px)
DESCRIPTION
شرح اوراكل بالعربى
Citation preview
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٢ -
البد منهاكلمة حنن نعيش يف عامل جديد حيكمه . لتحدي كبري واملسئولية هي مسئولية اجلميع ا
. عالةـنعيش يف عامل جديد قوامه قوى بشرية متعلمة، مدربة وف. واملعرفة العلمجديد أصبحت فيه املعايري كلها عاملية ، يف التعليم ، يف التدريب ، نعيش يف عامل
وى بشرية ـق قـدينا يف مصر ، وعن حـل. ياة ـي احلـل نواحـيف ك يف االقتصاد ، بلوة ـفقوة جمتمعنا من ق. ةبريـاقة شبابية كـط دينا يف مصرـائلة ، لــمتعلمة ه
.العصر وأساسياته شبابنا ، من تعليمه وتدريبه على آليات
ياسي ، يتوقف كثرياً على مدى قدرتنا ـتماعي والسـادي بل واالجصـتقدمنا االقتلى مدى قدرتنا ـثرياً عـف كـوقـابية ، يتـشرية الشبـقاء ذه القوة البـاالرت على
الذي يؤهلهم للحياة العملية املعاصرة الفرصة هلم للتدريب املتميز على إتاحةته بنفسه وإعطاؤه األمل يف قـادة ثـلى زيـنا عـتدرـدى قـلى مـع ثرياًـوقف كـ، يت
.املستقبل
.ا بكل إخالص ومحاسـهـيت نواجهـ الالدناـاه بـاجتهذه هي رسالتنا ومسئوليتنا .ولكن كما قلت املسئولية هي مسئولية اجلميع
لفلنعمل معاً مجيعاَ من أجل غداً أفضل ، من أجل جيل املستقب
مباركمجال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٣ -
: PL/SQLمقدمه عن أل* ويمكن استخدامها في العديد من المهام مثل عمل إجراءات أو Oracleهي إحدى اللغات المستخدمة في
ويتم استدعاء أوامر PL/SQL داخل لغة SQLالدوال على قاعدة البيانات حيث انه يتم إدخال جمل حيث أن داخل SQL وجمل ألPL خليط من PL/SQL لذلك يعتبر PL/SQLبسهوله داخل SQLأل
PL يتم التعامل مع جمل SQL بدون إعداد مسبق حيث في لغات البرمجة األخرى مثل VB يتطلب إلدخال داخلها استعمال SQLجمل
ذه تعتبر من نقاط القوه في وه SQL لتنفيذ أوامر أل EXEAUTEتعريفات معينه ثم نقوم باستعمال الدالة حيث تقوم SQLهذا الكود عبارة عن مجموعه من جمل أل ، وهو عبارة عن كود يتم كتابته PL/SQLأل
جمله وذلك ألنها تحتوي على إجراءات ومجموعه من ORACLE تقوم بدور مهم في أل PL/SQLأل
وهي تحتوي على مجموعه من PACKAGE وتحتوي على مكتبه هذه المكتبة هذه المكتبة تسمى اإلحداث اإلجراءات
ومجموعه من الدوال :PL/SQLوتوجد مميزات الستخدام جمل تستطيع التعامل مع األخطاء التي تظهر-١ تقوم بتعريف المتغيرات -٢ إلى أي بيئة أخرى غير بيئة االوراكل PL/SQL يمكن نقل البرنامج المكتوب بلغه -٣ بداخل كود واحدSQLمن جمل أل يمكن كتابه مجموعه -٤
: ويتكون هذا الكود من Block عبارة عن كود مكتوب هذا الكود يسمى PL/SQLوجمله ١- declaration : ويتم من خالل هذا الجزء تعريف ما يوجد داخل ألblock من متغيرات
variables ٢- executable command: كتوبة داخل يستخدم هذا الجزء لتنفيذ األوامر المcode وتعيين القيم
أو إجراءات أو دوال أو أحداث أو أشياء مثل ذلكSQLللمتغيرات واألوامر التي يتم كتابتها عبارة عن جمل ٣- exception handling :في هذا الجزء تتم التعامل مع األخطاء
طأ اليؤثر داخل الكود أي ال يحدث خ مثال إذا حدث خطأ معين ونريد هذا الخطأ نستخدم هذا الجزء من الكود
:Declaration من الكود وهو أوال الجزء األول تعريف ثمDeclare فيتم البدء بكلمه في هذا الجزء يتم تعريف المتغيرات المستخدمة داخل الكود
المتغيرات beginوينتهي هذا الجزء عند كلمه
وبعد هذه الكلمة يتم كتابه beginيبدأ بالكلمة :executable command من الكود وهو ثانيا الجزء الثاني الكود المطلوب
حيث انه في هذا الجزء يتم التعامل مع األخطاء : exception handling من الكود وهو ثالثا الجزء الثالث التي تحدث نتيجة لكتابه الكود
PL/SQLوبهذا نكون قد تعرفنا على محتويات جمله
:PL/SQL به بعض التعريفات الخاصة بواآلن سنقوم بكتا :PL/SQL األوامر بلوك-١
حيث انه يشمل اإلعالن عن المتغيرات والتعامل مع األخطاءPL/SQLهو الشكل المطلوب لكتابه أوامر : وهما وهي تنقسم إلى قسمان: البرامج الفرعية-٢١-Procedure :بال معامالت أو ال تستقبل هو برنامج عبارة عن مجموعه من األوامر تقوم باستق
أي تقوم بإرسال OUTأي بيعت له قيم ويمكن أن تكون المعامالت من النوع IN معامالت وتكون المعامالت Selectقيم إلى جمله
٢- function : هي عبارة عن مجموعه من السطور من األوامر لها اسم يمكن أن يستقبل معامالت ولكن البد أن يعيد قيمه
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٤ -
وهي تحتوي على قسم functionوالدوال procedureهي تجميع لمجموعه من : package المكتبة-٣ package والبرامج الفرعية وكذلك قسم محتوى هذه الدوال وعند استعمالها يتم تحديد اسم أل تعريف الدوال
ثم اسم الدالة آو البرنامج الفرعي مالصقه لحدث من أحداث قواعد البيانات مثل هي مجموعه من األوامر التي تكتب:triggerالحدث -٤
Insert ,update ,delete لتنفيذ أوامر عند هذه العملية . بلوك pl/sqlل ما سبق يسمى بلوك
أقسام و هي ٣إلى مجموعة من البلوكات و تحتوى على أكثر من pl/sql و تقسم لغة أل *** و هو يحتوى على جميع المتغيرات و الثوابت و ريو هو جزء اختيا declarative جزء التعريف -١
. وهو يشير إلى الجزء التنفيذي وهذا الجزء اختياري اى يمكننا عدم وضعة المؤشرات و هو جزء ضروري جدا executable الجزء التنفيذي -٢
يانات في قاعدة التي تقوم بمعالجة الب sqlاى إجباري على المستخدم و يحتوى هذا الجزء على جمل أل البيانات
و هذا الجزء اختياري اى يمكننا وضعه أو عدم وضعه و هذا exception جزء االستثناءات -٣ يقوم بتصحيح األخطاء الموجودة في الكود الجزء
******************************** PL/SQL تركيب البرنامج في لغة أل
Declare جزء التعريف Variables , Cursor , user defined exception
Begin الجزء التنفيذي Sql – Statement Pl/Sql – Statement Exception جزء تصحيح األخطاء Action To Perform When Error Occur End ;
:pl/sqlواآلن سنقوم باعطاء شكل يوضح ما هو شكل الكود في ال
: أجزاء رئيسيه ٣ حيث انه يتكون من pl/sqlهذا المثال يوضح شكل الكود في بيئة أل
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٥ -
ويستخدم تعريف المتغيرات declareالجزء األول وهو أل pl/sql ويستخدم هذا الجزء لكتابه كود beginالجزء الثاني وهو جزء أل
الجزء الثالث هو الجزء الخاص بمعالجه األخطاء التي تظهر نتيجة لكتابه الكود :إلى قسمان subprogrames وينقسم أل subprogrames ب pl/sqlفي أل blockيسمى أل
١-procedure: الستقبال بعض المعامالت والمعامالت هي عبارة جراء أو حدث يتم عملهوهو عبارة عن إ عن مجموعه من المتغيرات التي تأخذ قيمه أو تعطي قيمه للكود
٢-function :ولكن هي عبارة عن داله تقوم بحساب قيمه معينه وأيضا تقوم هذه الدالة باستقبال المعامالت هاالبد أن تقوم الدالة باسترجاع قيمه ل
مقدما functionوال procedure وسنقوم بدراسة كل من أل : مثال تجريبي
PL/SQL أو جمله SQLفي نهاية جمله أل ; يجب الوضع في االعتبار انه ال بد من وجود -١اى انه البرنامج ال يعرف نهاية الكود إال عند PL/SQLلكي تقوم بتشغيل الكود في جمله / استخدام -٢
وضع هذه العالمة أو اى أمر أخر PL/SQLالتي تمكنك بعدها بكتابه اى جمله (.) استخدام -٣
على العكس كلمه ;ال ينتهوا ب EXCEPTION , BEGIN , DECLAREالحظ أن الكلمات ** END يجب أن تنتهي ب ;
تكون مكتوبة في جزء PL/SQLو SQLهو عبارة عن مجموعه من جمل أل : البلوك EXCUTABLE و هذه الجملة تكون مهمة جدا في كودPL/SQL حيث انه بدون هذه الجملة ال
تشمل بلوك أو أكثر و هذه PL/SQL وحدة في أل اى أن اى و PL/SQLنستطيع أن نكون جمله , PROCEDURE ,FUNCTION ) البلوكات ممكن أن تنفصل عن األخرى و الوحدات االساسيه هي
SYNONYMOUS ) و أل SUBPROGRAMSب أل PROCEDURE , FUNCTIONو تعرف أل
SYNONYMOUS أل و تسمى بالبلوكات التي ليس لها اسم و هي التي تجعل PL/SQL بلوك منطقي و بلوك واحد يمكن أن يقدم جزء صغير من بلوك أخر و الذي يكون جزء إلى ممكن أن يحتوى على أرقام
. من وحدة كود كبيرة SYNONYMOUS هي البلوكات الغر مسماة و تدخل في التطبيقات بفاعليه SUBPROGRAM و هي تسمى بلوكات ألPL/SQL عامالت و ممكن أن تأخذ مPARAMETERS
عموما PROCEDURE , FUNCTIONو ممكن أن نحضرها من اى مكان أخر و ممكن أن تعرف ب
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٦ -
في عمل اإلحداث PROCEDUREتستخدم أل في حساب القيم FUNCTIONو أل
على مستوى التطبيق أو على السير فر الخاص ب االوراكل SUBPROGRAMو يمكنك تخزين أل مقدما functionوال procedure سة كل من ألوسنقوم بدرا
يجب أن FUNCTIONمع اختالف أن أل PROCEDUREمشابه ل FUNCTIONمالحظه أل ** يسترجع قيم هو عبارة عن مجموعة من األوامر لها اسم تستقبل معامالت أو ال تستقبل PROCEDUREو تعريف أل
و تعيد قيد أو ال تعيد فهو عبارة عن مجموعة من السطور من األوامر لها اسم يمكن أن تستقبل معامالت و FUNCTIONأما
. لكن البد من أن تعيد قيم عند استدعائها
declareوأالن سنقوم بالتعرف على فائدة المتغيرات التي يتم كتابتها في جزء أل ** لماذا يتم استخدام المتغيرات ؟
:variable ألنه من فوائد المتغيرات يتم تخزين البيانات فيها حيث تعتبر هذه المتغيرات كأنها ذاكره مؤقتة-١ تستخدم أيضا هذه المتغيرات في الحسابات بدون الرجوع إلى قاعدة البيانات-٢ pl/sqlيتم استخدام هذه المتغيرات في أجزاء متعددة من كود -٣ ة في جدول أخر يمكن تعريف نوع المتغير معتمدا على نوع أعمده موجود-٤
:pl/sqlكيفيه التعامل مع المتغيرات في بيئة او procedure أو في pl/sqlفي أي جزء من أجزاء pl/sql يتم أوال تعريف المتغيرات في بيئة أل-١
functionونقوم باختيار نوع المتغير سواء كان رقم أو حروف أو تاريخ ٦لمتغير يبدأ بالقيمة يمكن إعطاء المتغير قيمه ابتدائية مثال ا-٢ : ومنهاpl/sqlيوجد أنواع من المعامالت أو المتغيرات داخل بيئة -٣
هذا المتغير أو المعامل البد من تحديد قيمه له عند استدعاءه : inمتغير من النوع • pl/sqlهذا المتغير يقوم بإرسال قيم إلى الكود المكتوب في لغة أل : outمتغير من النوع •هذا المتغير البد من تحديد قيم له وأيضا هذا المتغير يقوم بإرسال قيم إلى :in out النوع متغير من •
pl/sql الكود المكتوب في أل :والمتغير له أنواع من هذه األنواع ما يلي** ١-Scalar data type : ومعناها انه يأخذ نوع واحد من البيانات هذه البيانات إما رقمي أو حرفي أو
ي تاريخ٢-composite data type : وهو عبارة عن مجموعه من أنواع البيانات المختلفة البيانات الرقمية
والبيانات الحرفية والبيانات التاريخية مثل السجل حيث يحتوي السجل على جميع أنواع هذه البيانات٣-lob data type : ٤ في طولها إلى هذا النوع من البيانات يستخدم لتخزين بيانات طويلة قد تصل
من lobجيجابايت وتستخدم أيضا في تخزين الصور ذات المساحات الكبيرة ويوجد أنواع مختلفة من البيانات :هذه البيانات
**blob : نوع من أنواع البيانات حيث انه يقوم بتخزين البيانات على هيئه بيانات ثنائيه حتى يستطيع التعاملمثال يقوم بتحويل الصور إلى ملفات ثنائيه الصور و ملفات نصيه معها حيث انه وهذا النوع خاص ب
والملفات الثنائية هي عبارة عن ملفات لها امتداد معين يقوم االوراكل بالتعامل مع هذا (Binary) تسمى االمتداد لذلك يقوم بتحويل الصور إلى ملفات ثنائيه
**clob :لحروف أو البيانات الحرفية الكبيرة في المساحة والتي هي نوع من أنواع البيانات التي تتعامل مع ا جيجابايت حيث انه أيضا يتم تحويله إلى بيانات ثنائيه حتى يستطيع االوراكل التعامل معه٤يصل طولها إلى
**Bfile :هذا أيضا نوع آخر من أنواع البيانات هذا النوع من البيانات يتعامل مع ألfile أو مقاطع من ويتم أيضا تحويله إلى البيانات الثنائية حتى يستطيع االوراكل التعامل معهاmovieسلسالت أفالم أو م
٤-Boolean data type : وهي تختبر البيانات هل هي صحيحة أم خاطئة وتأخذ القيمtrueأو false : من هذه المتغيرات متغيرات تسمى pl/sqlوتوجد متغيرات أخرى ال تعتبر هذه المتغيرات من بيئة إل
Bind variable: هو عبارة عن متغير يتم تعريفه في جمله ألdeclare هذا المتغير يعاد استخدامه مره أخرى
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٧ -
**Scaler data type : : ما في المثال اآلتيpl/sqlلتعريف المتغيرات في بيئة أل
المتغير األول وهو الرقم من النوع الرقمي وطول Declareفي هذا المثال تم تعريف المتغيرات في جزء Begin أرقام والمتغير الثاني هو االسم وهو من النوع الحرفي ثم في جزء أل ٨األرقام بداخله ال يتعدى
Scalar variable ويسمى هذا أيضا ب v_id ,v_nameنريد أن يضع بيانات الطالب داخل المتغيرات وذلك ألنه يحتوي على نوع واحد من البيانات أما رقمي آو حرفي أو تاريخي فالمتغير األول نوعه رقمي
Scalar variableوالمتغير الثاني نوعه حرفي لذلك يتم اعتبارهم هل المتغير ممكن أن يوجد بداخله قيمه خاليه وإذا حدث إجراء أي عمليه حسابيه على القيم ولكن السؤال
الخالية كيف سيتم التعامل مع القيم الخالية القيم الخالية هي عبارة عن قيم ال تساوي الصفر ولكن هي عبارة عن قيم غير موجودة أي لم يتم إدخال قيم
:القيم كما يليلهذا الحقل ويتم التعامل مع هذه Null فعند جمه أو طرح أو ضرب أي قيمه في (*)أو) –(أو (+) إذا تم تطبيق العمليات الحسابية مثل-١
ترجع null الناتج يكون مساوي للقيمة x+y عند عمل العملية الحسابية y=5 وx=null فمثال لو لدينا nullبالقيمة
Nullأي انه في العمليات الحسابية يرجع بالقيمة x= null فمثال لو لدينا المتغير Null فإنها أيضا ترجع بقيمه Ifعند تطبيق عالمات المقارنة مثل -٢
Null= يكون الناتج if x!=y مثل yو xعلى If وعند تطبيق الدالة y=5والمتغير تج أيضا قيمه خاليه مع القيم الخالية يكون الناOr أو المعامل Notأو المعامل Andعند استخدام المعامل -٣
مع القيم الخاليةANDأوال استخدام المعامل
ANDالمعامل TRUE القيمة FALSE القيمة NULLالقيمة NULLالناتج
الناتج يظهر ولكن خالي من القيم
FALSEالناتج الناتج ال يظهر
TRUEالناتج الناتج يظهر
TRUEالقيمة
FALSEالناتج الناتج يظهر
FALSEالناتج الناتج ال يظهر
FALSEالناتج الناتج ال يظهر
FALSEالقيمة
NULLالناتج الناتج يظهر ولكن
FALSEالناتج الناتج يظهر
NULLالناتج الناتج يظهر ولن
NULLالقيمة
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٨ -
يكون خالي من قيم خالي من القيم
مع القيم الخالية OR ثانيا استخدام المعامل
ORالمعامل FALSE القيمة NULLالقيمة TRUEالناتج
الناتج يظهر TRUEالناتج
الناتج يظهر TRUEالناتج
الناتج يظهر TRUEالقيمة
FALSEالناتج الناتج يظهر
FALSEالناتج الناتج ال يظهر
TRUE الناتج الناتج يظهر
FALSEالقيمة
NULLالناتج الناتج يظهر ولكن
خالي من القيم
NULLالناتج ظهر وان الناتج ي
خالي من القيم
TRUEالناتج الناتج يظهر
NULLالقيمة
ولكن هل يوجد طريقه أخرى لتعريف المتغيرات أو طريقه أخرى لمعرفه أنواع البيانات دون كتابه كل نوع البيان المطلوب ومعناها انه يريد نفس نوع البيان سواء كان رقمي او حرفي او تاريخيType%يمكن استخدام
:Type%على استخدام مثال
ومعناها نفس نوع البيان فمثال هذا المثال تالحظ أن Type%في هذا المثال تم تعريف المتغيرات باستخدام الموجود في جدول الطالب حيث أن نوع stud_idع البيان للعمود أرقام الطالب هو نفس نوIdالمتغير
البيان في عمود أرقام الطالب من النوع الرقمي لذلك يأخذ هو أيضا هذا النوع من البيانات وهو الرقميوع ويوجد متغير أخر وهو االسم يأخذ أيضا نفس نوع البيانات الموجودة في عمود أسماء الطالب وهي الن
.type%الحرفي وهذه هي فائدة استخدام :مثال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٩ -
طالب وھو رقم الطالب ونرید من الجدول أرقام الStud_idفي ھذا المثال تم تعریف متغیر ھذا المتغیر اسمھ أي ھو نفس اسم المتغیر وھذا یؤدي إلى تضارب وینتج خطأ معناه انھ یوجد صفوف stud_idوھذا العمود اسمھ
كثیرة تأتي من الجدول ولحل المشكلة للتداخل بین األسماء :نتبع اآلتي
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٠ -
قبل اسمھ وھذا یؤدي الى االختالف بین اسم العمود واسم vفي ھذا المثال تم تغییر اسم المتغیر بوضع الحرف
المتغیر ویؤدي إلى نجاح العملیة یمكن التعامل معھ pl/sqlولكن إذا حدث خطأ عند كتابھ الكود في أل
:مثل ھذا المثال
انھ یوجد أسماء كثیرة تأتي من جدول الطالب معنى ھذا الخطأ : المثال األتي نرى ولكن إذا أردنا معالجھ ھذا الخطأ
في ھذا المثال تم معالجھ الخطأ الذي ظھر سابقا وھو انھ یوجد عدد كبیر من األسماء تأتي من الجدول فیتم كتابھ
طأ الذي یظھر الخ thenو whenالذي یستخدم في معالجھ األخطاء ثم نكتب بین Exceptionجزء أل ثم نكتب جملھ تحل ھذا الخطأ وھي مثال جملھ طباعھ مثل الجملة السابقة وبھذا نكون قد عالجنا األخطاء
ومن الممكن أن تحتوي على عالمات Sqlهو عبارة عن مجموعه من جمل أل Pl/sqlالكود داخل أل ات البسيطة وتوجد أيضا العمليات المعقدة وتسمى هذه العمليات بالعملي(=,/,*,-,+)حسابيه من هذه العالمات
pl/sql وكل هذه العمليات يتم استخدامها داخل جمل أل (=:,/*,*/,=!,||,<>)مثل هذا الجزء يستخدم في تعريف declareوهو جزء أل pl/sqlويوجد جزء التعريفات في جمله أل
:م هذا الجزء وهي المتغيرات كما تم معرفته سابقا ولكن توجد شروط عند استخدا حرف ٣٠المتغير ممكن أن يصل طول الكلمة إلى أكثر من -١ يجب أن يبدأ المتغير بحروف أبجديه وليس أرقام أو عالمات خاصة-٢
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١١ -
ال يجب أن نختار اسم المتغير يكون هذا االسم موجود كاسم عمود في الجدول حيث انه يحدث تضارب -٣ بين اسم العمود واسم المتغير
) spaceأو _ أو $ ( من الممكن أن يكتب داخل المتغير العالمات-٤ single quotationعندما نعطي للمتغير قيمه هذه القيمة عبارة عن حروف توضع هذه الحروف بين-٥
(' ') ولكن األرقام ال توضع بين (' ') انه بدون كتابه هذه العالمة ال يتم في أخر الجملة لعمل تشغيل الكود المكتوب حيث(/) يتم استخدام أل -٦
تشغيل الكود pl/sqlولكن في أجزاء أخرى من جمل
Host variable :ھو عبارة عن متغیر یستخدم في جملھ أل declear أوال ثم یعاد استخدامھ مره أخرى في العالمة وھذه(:) مره أخرى یتم وضع executable block فعند استخدامھ في executable blockجزء
Host variableتوضع قبل المتغیر وھذه العالمة تدل على انھ مع إجراء عملیات أل Sqlالتي یتم استخدامھا في أل Selectولكي نأتي بالبیانات من الجدول نستخدم جملھ أل
Insert وUpdate و Delete كما نفعل في ألSql :وأالن سنقوم بتوضيح مثال للمتغيرات
:ولكن إذا أردنا إظھار المتغیر الذي بھ الناتج نتبع كما في المثال اآلتي
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٢ -
ثم اسم المتغير نالحظ انه Printفي هذا المثال إذا أردنا إظهار المتغير الذي يحتوي على الناتج نكتب الجملة في المتغير١يظهر اسم الطالب رقم
كان اسم المتغیر ھو نفسھ یجب ان یكون اسم المتغیر مختلف عن اسم االعمده الموجودة في الجدول وذلك ألنھ إذا ھذا التضارب بسبب أن اسم المتغیر ھو نفسھ اسم العمودpl/sqlاسم العمود فھذا یؤدي إلى تضارب في جملھ أل
:مثال
وھو رقم الطالب ونرید من الجدول أرقام الطالب Stud_idمثال تم تعریف متغیر ھذا المتغیر اسمھ في ھذا ال أي ھو نفس اسم المتغیر وھذا یؤدي إلى تضارب وینتج خطأ معناه انھ یوجد صفوف stud_idوھذا العمود اسمھ
كثیرة تأتي من الجدول :ولحل المشكلة للتداخل بین األسماء نتبع اآلتي
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٣ -
قبل اسمھ وھذا یؤدي الى االختالف بین اسم العمود واسم vفي ھذا المثال تم تغییر اسم المتغیر بوضع الحرف المتغیر ویؤدي إلى نجاح العملیة
یمكن التعامل معھ pl/sqlدث خطأ عند كتابھ الكود في أل ولكن إذا ح :مثل ھذا المثال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٤ -
انھ یوجد أسماء كثیرة تأتي من جدول الطالب معنى ھذا الخطأ
: المثال األتي نرى ا أردنا معالجھ ھذا الخطأولكن إذ
فیتم كتابھ في ھذا المثال تم معالجھ الخطأ الذي ظھر سابقا وھو انھ یوجد عدد كبیر من األسماء تأتي من الجدول الخطأ الذي یظھر thenو whenالذي یستخدم في معالجھ األخطاء ثم نكتب بین Exceptionجزء أل
ثم نكتب جملھ تحل ھذا الخطأ وھي مثال جملھ طباعھ مثل الجملة السابقة وبھذا نكون قد عالجنا األخطاء الممكن أن تحتوي على عالمات ومنSqlهو عبارة عن مجموعه من جمل أل Pl/sqlالكود داخل أل
وتسمى هذه العمليات بالعمليات البسيطة وتوجد أيضا العمليات المعقدة (=,/,*,-,+)حسابيه من هذه العالمات pl/sql وكل هذه العمليات يتم استخدامها داخل جمل أل (=:,/*,*/,=!,||,<>)مثل
هذا الجزء يستخدم في تعريف declareوهو جزء أل pl/sqlويوجد جزء التعريفات في جمله أل :المتغيرات كما تم معرفته سابقا ولكن توجد شروط عند استخدام هذا الجزء وهي
حرف ٣٠المتغير ممكن أن يصل طول الكلمة إلى أكثر من -١ يجب أن يبدأ المتغير بحروف أبجديه وليس أرقام أو عالمات خاصة-٢كون هذا االسم موجود كاسم عمود في الجدول حيث انه يحدث تضارب ال يجب أن نختار اسم المتغير ي-٣
بين اسم العمود واسم المتغير ) spaceاو _ او $ ( من الممكن أن يكتب داخل المتغير العالمات-٤ single quotationعندما نعطي للمتغير قيمه هذه القيمة عبارة عن حروف توضع هذه الحروف بين-٥
(' ')قام ال توضع بين ولكن األر(' ')في آخر الجملة لعمل تشغيل الكود المكتوب حيث انه بدون كتابه هذه العالمة ال يتم (/) يتم استخدام أل -٦
تشغيل الكود
**Scalar data type :
: ما في المثال اآلتيpl/sqlلتعريف المتغيرات في بيئة أل
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٥ -
ول وهو الرقم من النوع الرقمي وطول المتغير األDeclareفي هذا المثال تم تعريف المتغيرات في جزء Begin أرقام والمتغير الثاني هو االسم وهو من النوع الحرفي ثم في جزء أل ٨األرقام بداخله ال يتعدى
Scalar variable ويسمى هذا أيضا ب v_id,v_nameنريد أن يضع بيانات الطالب داخل المتغيرات إما رقمي أو حرفي أو تاريخي فالمتغير األول نوعه رقمي وذلك ألنه يحتوي على نوع واحد من البيانات
Scalar variableوالمتغير الثاني نوعه حرفي لذلك يتم اعتبارهم ولكن هل يوجد طريقه أخرى لتعريف المتغيرات أو طريقه أخرى لمعرفه أنواع البيانات
في جدول الطالب لهذا المتغير ومعناها انه يريد نفس نوع البيانات الموجودة مثالType%يمكن استخدام
:Type%مثال على استخدام
ثال تالحظ أن ومعناها نفس نوع البيان فمثال هذا المType%في هذا المثال تم تعريف المتغيرات باستخدام
الموجود في جدول الطالب حيث أن نوع stud_id هو نفس نوع البيان للعمود أرقام الطالب Idالمتغير البيان في عمود أرقام الطالب من النوع الرقمي لذلك يأخذ هو أيضا هذا النوع من البيانات وهو الرقمي
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٦ -
جودة في عمود أسماء الطالب وهي النوع ويوجد متغير أخر وهو االسم يأخذ أيضا نفس نوع البيانات المو .type%الحرفي وهذه هي فائدة استخدام
Boolean data type: :Booleanلتعريف المتغيرات التي تأخذ صح أو خطأ إي يكون نوعها
True خطأ والمتغيرات دائما ترجع إماFalse صحيح أو True انه يساوي أما Booleanمعنى كلمه Nullأو ترجع قيمه ب خطأ Falseصحيح أو
:مثال
وقد تم معرفه معنى كلمه Boolean ونوعه من النوع V_checkفي هذا المثال تم استخدام المتغير Booleanرجع صح أو خطأ ففي هذا المثال إذا كان ثمن قيمه الدورة اكبر من رقم الدورة ومعناها إما ي
False وإال يرجع ب Trueيرجع هذا المتغير ب :Composite data type
يحتوي على أنواع متعددة من البيانات منها البيان الرقمي والحرفي والتاريخي Recordهو عبارة عن واع متعددة من أنواع البيانات وأالن سنقوم بإعطاء مثال يوضح معنى كلمه أو الجدول الذي يحتوي على أن
Composite data type :مثال
إلنشاء السجل أوال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٧ -
وهو عبارة عن سجل يحتوي على بيانات Stud_record_type جديد يسمىفي هذا المثال تم عمل سجل متعددة مثل الحروف واألرقام والتواريخ والبد أن نعرف السجل على انه متغير ونوعه عبارة عن سجل
حتى نستطيع إدخال البيانات فيه كما هو موضح في المثال السابق دة مثال في جدول الطالب ولكن ال نريد أن نكتب كل اسم ولكن إذا أردنا كتابه كل أنواع البيانات الموجو وهي معناها كل أنواع البيانات في الجدولRowtype%عمود ونوعه لحل هذه المشكلة نستخدم الكلمة
:مثال
الذي تم تكوينه في المثال السابق بأخذ كل أنواع stud_recordفي هذا المثال تم تعريف نوع المتغير Rowtype%البيانات الموجودة في الجدول سواء كانت حرفيه أو رقميه أو تاريخيه ولذلك تم استخدام
:إذا أردنا كتابه تعليق على الكود بداخله مثال :للتعليق نوعان
وهذه ) --(لنوع األول أن التعليق عبارة عن سطر ولكي نوقف عمل التعليق نضع في بداية السطر ا-١ العالمة معناها إيقاف عمل التعليق
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٨ -
النوع الثاني وهو أن يتكون التعليق من أكثر من سطر وإليقاف تشغيل هذا التعليق نستخدم العالمة-٢ ليقوعنى هذه العالمة إيقاف تشغيل التع */) (/*
:مثال على ذلك
)--(ولكن تم وقف هذا التعليق باستخدام العالمة(this is my name) في هذا المثال تم عمل تعليق يسمى
: في أكثر من سطرمثال أخر يوضح كتابه التعليق
ولكن تم وقف عمل هذا التعليق بوضع العالمة pl/sqlفي هذا المثال تم عمل تعليق على الكود المكتوب أل يل التعليق والن التعليق أكثر من سطر لذلك نستخدم هذه العالمة وهي تعني إيقاف تشغ */) (/*
) --(أما إذا كان التعليق يحتوي على جمله واحده فنضع العالمة : من هذه األشياء PL/SQLتوجد بعض األشياء المسموح بكتابتها في لغة أل
(To_char,To_date,To_number)دوال التحويل وهي -١ (Lower, Upper ,Initcape,concatenate)بق على الحروف الدوال التي تط-٢ الدوال التي تطبق على األرقام-٣ (Monthes_between, Add_monthes,Next_day,Last_day)الدوال التي تطبق على التاريخ-٤
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٩ -
:Pl/sqlوتوجد أيضا بعض األشياء الغير مسموح بها في لغة Decodeاستخدام الدالة -١ (Max ,Min,Avg,Count,Sum)ل المجمعة مثل استخدام الدوا-٢
:pl/sqlمثال على استخدام الدوال في جمل أل
يث أنها تستخدم للربط بين الحروف آو أسماء ح(sql)وهي من دوال أل) ||(في هذا المثال تم استخدام الدالة
االعمده (pl/sql)مثال آخر يبين استخدام الدوال في جمله أل
ي تستخدم في تحويل الحروف الى حروف كبيرهالت Upperفي هذا المثال تم استخدام الدالة (pl/sql)وبهذا يتم استخدام الدوال في لفه أل
عند استخدام قيمه هذه القيمة ال تتساوى مع القيم الموجودة في الجدول من ناحية شكل الرقم أو شكل التاريخ
(To_char,To_number,To_date)نستخدم دوال التحويل وهي :pl/sql دوال التحويل في جمل أل مثال على استخدام
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٢٠ -
هذا المثال اظهر هذا الخطأ ألنه ال يوجد هذا الشكل من األرقام في الجدول لذلك نستخدم دوال التحويل وهي ألنها تستخدم في تحويل األرقام والتاريخ (To_char)الدالة
:ولمعالجه هذا الخطأ كما في المثال األتي
م عمود تليفون الطالب إلى هذا الشكل من األرقام كما لتحويل أرقاTo_charفي هذا المثال تم استخدام الدالة
هو موضح بالشكل pl/sqlوبذلك تم استخدام دوال التحويل في جمل أل
PL/SQL BLOCK SYNTAXكيفيه بناء البلوك **
حرف ٣٠ممكن أن تحتوى على أكثر من • " "ال يمكنك وضع الكلمات المحجوزة إال إذا وضعناها في • ى على حرف ابجدى البد أن تحتو • في قاعدة البيانات ال تختار نفس االسم المطابق ألسم الحقل للجدول الموجودة •
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٢١ -
لوضع بعض التعليقات في الكود ** سطر واحد إذا كانت التعليق-- ٢نبدأ السطر ب
*/ ة و فى البداي*/ و إذا كان التعليق يحتوى على يحتوى على سطور كثيرة فنقوم بوضع التعليق بين في النهاية
: PL/SQL في أل FUNCTIONSالدوال ** مثل PL/SQLو تكون مسوحه في أل SQLمعظم الدوال تكون المسموحه في
• SINGLE –ROW NUMBER FUNCTIONS • SINGLE – ROW CHARACTER FUNCTIONS • DATATYPE CONVERSION FUNCTION • DATE
: و تكون غير مسوحه في
• DECODE • GROUP FUNCTION (AVG , SUM , MIN , MAX,STDDEV )
:تحويل أنواع البيانات **
ممكن أن تحول البيانات إلى اى نوع بيان آخر • اختالط أنواع البيانات ممكن أن يعطى أخطاء وهذا له تأثير • دوال التحويل •
TO_CHAR TO_DATE
TO_NUMBER
Nested Block البلوكات المتداخلة يوجد أيضا في لغة Subquary وكانت تسمى ب Sql في Selectداخل جمله Selectمثلما تم كتابه جمله
pl/sql كتابه بلوك داخل بلوك وهذا يسمى ب Nested blocksت المتداخلة ويتم التداخل بين البلوكا
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٢٢ -
أي الجزء الذي يتم كتابه الكود فيه وتصبح كلها كجمله واحده أو بلوك Executableالبلوكات في جزء أل وهو جزء معالجه األخطاء Exception في جزء Nested blockواحد ويمكن أيضا كتابه
وهي عبارة عن متغيرات يتم variable scopeمى والمتغيرات التي يتم استعمالها في البلوكات المتداخلة تسويتم استخدام نفس Declare في البلوك األول في جزء أل (z)استخدام احد هذه المتغيرات وليكن المتغير
وهذا ما يسمى ب executable sectionهذا المتغير في البلوك الثاني ولكن هذه المرة في جزء أل variable scope
(Child) ال يرى اي متغير من البلوك الفرعي (Parent)بلوكات المتداخلة البلوك الرئيسي ونالحظ في ال :مثال على استخدام البلوكات المتداخلة
ويحتوي البلوك الخارجي على كود خارجي Outer بلوك أوال البلوك الخارجي وهو ٢ في هذا المثال تم عمل وهذا البلوك يحتوي على متغير رقم الطالب ومتغير ثمن End وbegin و declareهذا الكود مكون من
معرفه قيمهExecutable sectionالدورة ورقم الدورة ومتغير الختبار هذه المتغيرات ونريد في جزء أل وهو عبارة عن قيمه المتغير ثمن الدورة مرتبطة مع رقم الدورة v_check المتغير
وهو عبارة عن بلوك هذا البلوك موجود داخل (Inner block)البلوك الثاني هو البلوك الداخلي ويسمى ويحتوي على المتغيرات رقم End وbegin و declareالبلوك األصلي ويحتوي هذا البلوك أيضا على
وهو عبارة عن p_check ونقوم بحساب المتغيرP_checkطالب وتاريخ ميالد الطالب وأيضا المتغير ال معناها رقم الطالب الموجود خارج Outer.v_stud_id ومعنى أل متغير رقم الطالب ومتغير رقم الدورة
(Inner block) :ولكن إذا أردنا معرفه مثال نتائج المتغيرات السابقة
الخارجي أي الموجود في البلوك األول v_checkردنا معرفه قيمه المتغير إذا أ-١ v_check=10||20:تكون قيمه هذا المتغير هي
(Inner) حيث أنها تتبع البلوك الثاني وهو Outer. V_stud_id=10*200إذا أردنا معرفه قيمه المتغير -٢
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٢٣ -
:ملحوظة و موجود في البلوك الخارجي فمثال في حاله نالحظ في هذا الكود أن البلوك الداخلي يرى ما ه
Outer. V_stud_idنالحظ انه يرى قيمه رقم الطالب من الرقم الموجود في البلوك الخارجي PL/SQL OPERATORS INالعمليات في أل **
• LOGICAL • ARTHMETIC • CONCATENATION • PARENTHESES TO CONTROL ORDER OF OPERATIONS • EXPONENTIAL OPERATOR (**)
العملية الوصف NOT , ** دليل و إنكار
- , + تتطابق و عدم تتطابق / , * الضرب و القسمة
|| , - , + االضافه و النقصان و الربط IS NULL , LIKE ,BETTWEEN , IN ,=<,=>,<,>,=!,= عمليات المقارنة
AND التوحيد OR أو
بعض العملياتأمثله على SEQUENCEلعمل عداد متسلسل مثل
١ بمقدار العداد إلى إضافة اى + و ذلك باستخدام العملية
IS NOT NULLاستخدام العملية تساوى و العملية
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٢٤ -
: identifiersكيفيه تمييز التعريفات في هذا الجدول سوف نقوم بوضع التعريف و الحرف أو الكلمة التي تشير إلى هذا التعريف
مثال التي تشير إليهالكلمة التعريفVariable V_name V_sal Constant C_name C_company_name
Cursor Name_cursor Emp_cursor Exception E_name E_too_many Table type Name_table_type Amount_table_type
Table Name_table Order_total_table Record type Name_record_type Emp_record_type
Record Name_record Customer_record Sql*plus substitution variable ( referred to
substitution parameter )
P_name P_sal
Sql*plus global variable (it's referred to bind
variable)
G_name G_year_sal
ـــــــــــــــــــــــــــ ـــــــــــــــــــــــــــــــــــــــــــــــ
PL/SQL في أل SELECTعمليه استخدام عبارة أل **
عندما تقوم باسترجاع معلومات أو تعديل معلومات من خالل قاعدة البيانات يجب عليك استخدام عبارة SQL و ذلك باستخدام و عمل معالجه لجميع البيانات و التحكم و السيطرة SQL داخل أل
PL/SQL ارة كما يمكنك القيام باستخدام عب SELECT لكي تقوم بإعطاء المتغيرات قيم
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٢٥ -
PL/SQLو SQL يمكننا عمل مقارنه بين فالنPL/SQL SQL
أوامر السيطرة على البيانات ال يوجد بها · TRANCSACTION CONTROL
مثل COMMIT , ROLLBACK , SAVEPOINT
يوجد بها أوامر السيطرة على البيانات ·TRANCSACTION CONTROL
(DDL) ال يوجد بها لغات التعريف بالبيانات ·DATA DEFINITION LANGUAGE
:مثل CREATE TABLE
ALTER TABLE DROP TABLE
يوجد بها لغات التعريف بالبيانات ·(DDL )
DATA DEFINITION LANGUAGE
(DCL)ت ال يوجد بها لغة التحكم بالبيانا ·DATA CONTROL LANGUAGE
مثل GRANT , REVOKE
يوجد بها لغة التحكم بالبيانات ·(DCL)
DATA CONTROL LANGUAGE
PL/SQLفي أل SQLعبارات
SQLاسترجاع البيانات من البيانات باستخدام عبارات PL/SQLداخل أل SQLالصيغة االساسيه الستخدام
SELECT SELECT_LIST INTO { VARIBALE_NAME , [ VARIABLE_NAME] ,……. | RECORD_NAME ] FROM TABLE WHERE CONDITIONS ;
SELECT_LIST و هي مجموعة من األعمدة أو على األقل عمود واحد VARIABLE_NAME : اسم المتغير
RECORD_NAME : اسم السجل TABLE_NAME : يشير إلى قاعدة البيانات اسم الجدول الذي
CONDITION : تحتوى على أسماء األعمدة و التعبيرات و العمليات و المتغيرات و الثوابت الPL/SQL
و SELECT .. FROMو تكون بين SELECTجزء اجبارى في جمله أل INTOاستخدام كلمه ان تعطى متغير لكل عمود قمت ويجب SQLتستخدم في تعيين أسماء المتغيرات السترجاع القيم من
باالستعالم عنة : مثال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٢٦ -
; ب SQLو يجب التأكد من إنهاء عبارات
و PL/SQLداخل WHEREستخدم عبارة و يمكن أن ن SELECTداخل جمله أل INTOو نستخدم ذلك لتعيين المتغيرات و التعبيرات و الثوابت لألعمدة
: مثال :استرجاع اجمالى المرتبات لكل الموظفين الموجودين في القسم الذي تختاره
PL/SQLفي أل DATA MANIPULATON LANGUAGE (DML)استخدام **
مثل (DML)يمكننا التغيير في جداول قاعدة البيانات باستخدام أوامر
• INSERT إلضافة صف جديد من البيانات في الجدول • UPDATE تعديل صف من البيانات الموجدة في الجدول • DELETEصفوف الغير مطلوبة في الجدول حذف ال
insert أوال مثال إلضافة بيانات في الجدول و ذلك باستخدام عبارة و هذا المثال يقوم بإضافة موظف جديد في جدول الموظفين
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٢٧ -
update في الجدول و ذلك باستخدام عبارة تعديل البيانات الموجودة: ثانيا
جنيه إلى مرتبات جميع الموظفين الموجودين في قاعدة البيانات ٣٠٠٠في هذا المثال سوف نقوم بإضافة ANALYSTو تكون وظيفتهم
DELETE حذف البيانات الموجودة في الجدول و ذلك باستخدام عبارة :ثالثا
سماء المتغيرات و أسماء األعمدة في الجدولتداخل بين أ**
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٢٨ -
ال يصح أن نعطى متغير اسم هذا االسم يكون مستخدم كاسم عمود في الجدول الن هذا يؤدى إلى تضارب بين اسم العمود و اسم المتغير
بين األسماء و هذا المثال يوضح هذا التضارب
TRANCSACTION CONTROL استخدام أوامر السيطرة على البيانات*
: COMMITأوال استخدام أمر الحفظ
ثانيا استخدام أمر الحفظ باسم على هذا التعديل
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٢٩ -
للرجوع إلى نقطة معينة محفوظة ROLLBACKاستخدام أمر : ثالثا في هذا المثال كيفية إضافة بيانات إلى جدول و إظهار هذه التغييرات ثم الرجوع إلى نقطة قد قمنا سوف نرى
بحفظها قبل عمل التغيير و إظهار النتيجة مرة أخرى سنرى أن التعديل ال يوجد له اثر حيث أننا رجعنا إلى نقطة قد حفظناها قبل التعديل
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٣٠ -
pl/sql CONTROLLING PL/SQL FLOW OF EXECUTIONالتحكم هياكل البيانات أل الممكن أن وقمنا بكتابه هذا الشرط فمنpl/sqlإذا أردنا أن نطبق شرط معين على الكود المكتوب في أل
يكون االجابه إما صحيحة أو خاطئة وربما هذا الشرط نريده أن يتكرر في أكثر من كود هذا التكرار للشرط على مجموعه من الصفوف في الجدول فيتم أننا نريد تكرار شرطloop حيث أن فكره أل loopيسمى ب
while استخدام case بحاالته واستخدام األمر ifاستخدام أوامر معينه من هذه األوامر استخدام األمر : هذه األوامر سنتناولها بالتفصيل فيما يليforواستخدام
:If_then_end _Ifاستخدام : أوال كتوب نفذ الجملة التي تليه معناها انه لو حدث الشرط الم Ifالدالة
:والصيغة العامة لها هي If الشرط المراد اختبارهThenالجملة المراد كتابتها elsifالشرط المراد اختباره then الشرط المراد كتابته
Elseالجملة المراد كتابتها End if;
الموجودة بعد الكلمة ومعناها انه يختبر الشرط أوال إذا كان الشرط صحيح يكتب هذه الجملة Then أما إذا إذا كان صحيح نكتب الجملة Elsifكان الشرط غير صحيح فنقوم باختبار الشرط الموجود في األمر
أما إذا كان الشرط غير صحيح نقوم بكتابه الجملة Elsifالموجودة في األمر Then الموجودة بعد كلمه Elseالموجودة بعد الكلمة :مثال توضيحي لذلك
فقط then مع ifأوال استخدام
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٣١ -
ا لم علي أما إذ= نكتب الشرط وهو المتغير اسم الطالب ٥هذه الجملة معناها إذا كان رقم المتغير اكبر من
Ifوائل وتم إنهاء جمله أل = نكتب اسم الطالب ٥يتحقق الشرط وهو أن رقم الطالب اقل من أو يساوي End ifبجمله
:كما في المثال اآلتي Printولكي نرى الناتج الذي يظهر نستخدم األمر
Endفي هذا المثال تم طباعه المتغير اسم الطالب ونالحظ في الناتج انه تم تطبيق جمله الشرط الموجودة في
Endوينفذ جمله IF لذلك ال ينفذ جمله ٥وذلك الن رقم الطالب ليس اكبر من إذا لو حدث هذا الشرط وعمناهاElsif على IFمن الممكن أن تحتوي جمله أل أمر
IF في جمله Elsifواآلن سنعطي مثال على استخدام
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٣٢ -
يكون اسم ٥=ان رقم الطالب ومعنى هذا الكود لو كIF في جمله أل ELSIFفي هذا المثال تم استخدام الدالة
يكون ٦= وهي معناها وإال إذا كان رقم الطالب ELSIF ولكن لو هذا خطأ يقوم بتنفيذ عبارة modyالطالب WEWE وإذا كان ذلك خطأ أيضا نكتب اسم الطالب MADYاسم
لكي نرى ما يوجد داخل المتغير نالحظ المثال األتي
لم يتحقق فيتم elsif وIFنالحظ في الناتج انه تم طبع اسم الطالب وائل الن الشرط الموجود في جمله ال
ELSEتطبيق جمله :استخدام شرطين متداخلين مثال IFمن الممكن داخل جمله
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٣٣ -
في هذا المثال تم تعريف المتغيرات وهي الرقم واالسم والعنوان ورقم الطالب واسم الطالب ثم استخدامنا ٥=رطين الشرط األول هو رقم الطالب رقمه الختبار شرط معين ولكن هذا الشرط مكون من شIF األمر
الذي تم شرحه سابقا في andوالشرط الثاني أن يكون اسم الطالب وتم الربط بين الشرطين باستخدام المعامل Sql والمعامل and معناه انه البد من أن يتحقق الشرطان السابقان معا وال يتحقق شرط والشرط الثاني ال
التي تحتوي على العنوان thenنا انه لو تحقق الشرطان السابقان يتم تنفيذ جمله ه ifيتحقق ومعنى جمله Giza وإال إذا كان الشرطان غير متحققان يتم تنفيذ جمله Else التي بها العنوان tanta ثم ننهي جمله if ب
End if مثال
: IF الشروط المتداخلة في جمله آخر الستخدام
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٣٤ -
!خطأ
بدال من ORهذا المثال هو نفس المثال السابق ولكن االختالف الوحيد في هذا المثال انه تم استخدام المعامل ليس شرطا أن يتحقق ORمعامل هو في الAND والمعامل OR واالختالف بين المعامل ANDالمعامل
الشرطان ولكن من الممكن أن يتحقق شرط واألخر ال يتحقق ومع ذلك يتم تنفيذ الشرط بالرغم من عدم تحقق احمد = واسم الطالب ٥=الشرطان معا ونالحظ ذلك في المثال السابق حيث أن الشرط األول هو رقم الطالب
ELSEا لم يتحقق هذا الشرط نقوم بتطبيق جمله وإذTHENفإذا تحقق هذا الشرط نطبق جمله IFمكتوبة داخل جمله IF متداخلة أي معناها جمله IFمن الممكن أن يحتوي الكود المكتوب على جمله
:مثال على ذلك
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٣٥ -
مرتين المرة األولى معناها لو عنوان الطالب هو طنطا اجعل رقم الطالب IFفي هذا المثال تم استخدام جمله
ننهي أوال الجملة الثانية ب IF ونقوم بإنهاء جمل ٦ رقم الطالب وأال لو عنوان الطالب هو الجيزة اجعل٥ End if األولى ثم ننهي الجملة الثانية بEnd if الثانية
يتم التحكم في مسار البرنامج أو جعل البرنامج ينفذ عمليات معينه فقطIFباستخدام الدالة : ملحوظة** هي الوحيدة التي تتحكم في سير البرنامج ولكن يوجد داله أخرى تستخدم للتحكم في IFولكن ليست األمر
ولكن الصيغة تختلف عن صيغه IFلدالة وهي أيضا لها نفس استخدام اCASEسير البرنامج مثل األمر انه يقوم بإعطاء متعددة للمتغير CASEوفائدة األمر CASE واآلن سنرى كيفيه استخدام األمر IFالدالة
: هيCASEمن خاللها يتم من خاللها االختيار بين القيم والصيغة العامة لألمر CASEاسم المتغير الذي له قيم متعددة
WHEN الشرط المطلوب اختباره THEN هذا الشرط الناتج من تطبيق WHEN الشرط المطلوب اختباره THENالناتج من تطبيق هذا الشرط
..
..
.. ELSEناتج أخر
END; :CASEمثال الصيغة العامة الستخدام األمر
عندما يتم كتابته في الكودCaseهذه هي شكل األمر :Caseمثال لتطبيق األمر
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٣٦ -
تم أوال تعريف متغير ثمن الدورات من النوع الرقمي ثم نعرف Case في المثال السابق تم استخدام األمر ١٠٠٠= ومعناه انه لو ثمن الدورة Caseمتغير من النوع الرقمي وهو رقم الدورة ثم نكتب في الكود األمر
ولو ثمن الدورة ٢٠* اضرب ثمن الدورة في ١٥٠٠ وإذا كان ثمن الدورة ١٠*لذلك اضرب ثمن الدورة ٤٠* وإال إذا كان غير ذلك اضرب ثمن الدورة في ٣٠* ثمن الدورة في اضرب٢٠٠٠
:Caseمثال آخر يوضح استخدام األمر
المتغير Caseف الوحيد في هذا المثال انه ال يوجد بعد األمرهذا المثال هو نفس المثال السابق ولكن االختال
أي انه ليس شرطا Whenالذي سيعطى له القيم المختلفة وتم وضع المتغير الذي يأخذ قيم مختلفة بعد كلمه اسم المتغير وهذا هو االختالف بين المثال السابق والمثال الحاليCaseأن نكتب بعد كلمه متغير لكي نرى الناتج لل
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٣٧ -
على المتغير يظهر هذا الناتجCase وبعد تطبيق األمر تم طبع المتغير الذي يحتوي على بيانات متعددة
١٠*١٠٠٠وهو ناتج من ضرب قيمه الدورة
:الجمل التكرارية
جمل تكراريه ومعنى الجمل التكرارية هي عبارة عن جمل يتم تكرارها داخل PL/SQLيوجد داخل جمل أل الكود حيث أنها تتكون من مجموعه من األوامر التي تتكرر ويتم التحكم في تشغيل أو إيقاف هذه األوامر عن
:أنواع من الجمل التكرارية ويوجد ثالثة LOOPSالعمل هذه الجمل التكرارية تسمى ١-BASIC LOOP ٢-FOR LOOP ٣-WHILE LOOP
: Basic loopأوال أل وبين Loopمن ابسط جمل التكرار حيث انه يتم كتابه الجملة التكرارية بين الكلمة Basic loopيعتبر أل
ى إلى بداية جمله التكرار يرجع مره أخرend loop وفي كل مره عندما يصل إلى الكلمةend loopالكلمة الن loopللخروج من Exit وينفذ الجملة الموجودة بداخل الجملة التكرارية ونضع الكلمة loopوهي الكلمة
يستمر أل Exit وبدون الكلمة Loop من أل معناها انه عندما يجد الشرط المناسب يخرج Exitالكلمة Loop توي والبد أن يحدث مره واحده على األقل في العمل دون توقف ومن الممكن أن يح
:Basic loopالصيغة العامة الستخدام loop الجملة المراد تكرارها
Exit (whenعندما يحدث هذا الشرط ( False أو trueأي يرجع أما Boolean هذا الشرط عبارة عن
:Basic loopمثال الستخدام أل
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٣٨ -
والصيغة العامة له كما هي موضحه بالشكل Basic loopفي هذا المثال تم استخدام أل رط أن نريد في هذا المثال تحديد ثمن الدورة ورقم الدورة داخل المتغيران الثمن والرقم من جدول الدورات بش
Loop في كل مره يكرر الجملة الموجودة بعد الكلمة loop ثم بعد ذلك يدخل في ١٠٠٠=يكون سعر الدورة حيث انه يدخل داخل جدول الدورات ويرى أول طالب يأخذ من سجل أول طالب ثمن الدورة ويضيف عليها
يستمر في تنفيذ ٢٠اقل من لو ٢٠ هو اقل من ثم عندما ينتهي من هذه الخطوة يرى رقم الطالب هل١٠ فعندما يكون رقم الطالب ٢٠= جمله التكرار على الطالب الثاني وال ينفذ هذه الجملة عندما يكون رقم الطالب
وال ينفذ الجملة التكرارية loop يخرج من أل ٢٠= اري في نهاية جمله التكرار وتستخدم هذه الكلمة إلنهاء الجملة التكرEnd loop نضع الكلمة
:وإلظهار ناتج هذا التكرار نرى المثال األتي
: loopداخل أل ifاستخدام الدالة :يغة كما سنرى في المثال اآلتيويكون بهذه الص loopداخل أل if من الممكن استخدام الدالة
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٣٩ -
هذان المتغيران من النوع الرقمي ثم بدأنا في تنفيذ Id والمتغير Costفي هذا المثال تم تعريف المتغيران
بشرط أن يكون Id وCostب وهو عبارة عن نضع ثمن الدورات ورقم الدورة داخل المتغيران الكود المكتو الذي Idبداخله هذه الجملة التكرارية وهي نزود المتغير Loop ثم بعد ذلك ندخل في ٢=رقم الطالب
ومعناها الخروج Exit ثم ينفذ جمله Id = 40 إذا كان المتغير ١٠يحتوي على بيانات أرقام الدورات بمقدار Loopمن أل
:لنرى النتائج من تطبيق هذا الكود
كما نرى في الشكل السابقCost والمتغيرIdتم طباعه المتغيران :For loopاستخدام
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٤٠ -
أيضا لعمل تكرار حيث انه يستخدم لتنفيذ العملية عدد من المرات المعروفة حيث أنها تقوم For يستخدم بتحديد القيمة التي ستبدأ بها والقيمة التي ستنتهي بها
:forالصيغة العامة الستخدام
FOR تلقائيا for المتغير المعرف على داخل أل Inالعدد الذي يبدأ به .. العدد الذي ينتهي به Loop الجملة المراد تكرارهاEnd loop;
forوهذه هي الصيغة العامة لجمله :لتوضيح الصيغة العامة
هذا المتغير (i) متغير وهو مثال وليكن For وتم استخدام بعد كلمه Forام أل هذه هي الصيغة العامة الستخد معناها انه سيتم التكرار عدد من ٥ و ١ والنقطتين الموجودتان بين (5..1)يوضح عدد مرات التكرار من
Loop ثم نكتب بعد ذلك الجملة التكرارية وننهي بعد ذلك أل ١،٢،٣،٤،٥المرات :Forمثال على استخدام
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٤١ -
ثم بدأنا في عمل الكود pl/sql ولكن تم تعريفهم خارج كود Cost و IDفي هذا المثال تم تعريف المتغيران وتم استعمال هذان المتغيران على أنهم id و cost داخل المتغيران وهو تم تحديد ثمن الدورة ورقم الدورة
host variable قبل المتغير ثم تم إنشاء جمله تكراريه باستخدام أل (:) فتم وضعFor حيث انه تم تعريف ثم For loopألنه معرف تلقائيا داخل أل Declare هذا المتغير ال يعرف في أل Forمتغير بداخل أل
مرات ٥ وفي هذا المثال يحدث التكرارloop والقيم التي سينتهي بها أل loopالقيم التي سيبدأ بها أل نحدد في كل ٥ بمقدار Id مرات وهذه الجملة التكرارية معناها انه يزود المتغير٥أي سيتم تنفيذ الجملة التكرارية
٤في جدول الدورات للطالب رقم هذا المتغير يحتوي على رقم الدورة الموجود Loopمره يحدث بها ٥ثم يتم التكرار مره ثانيه ونزوده بمقدار ٤٥ عندما يتم تزويده أول مره يصبح ٤٠=فنجد أن رقم الدورة
وفي آخر مره المرة الخامسة ٦٠ وفي المرة الرابعة يصبح ٥٥ ثم في المرة الثالثة يصبح ٥٠ليصبح لمستخدمة للتكرارا For وبهذا نكون قد طبقنا جمله أل ٦٥يصبح
:Idولمشاهده هذه النتائج التي تظهر نقوم بعمل طباعه للمتغير
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٤٢ -
وبعلى الكود المكت forكما نشاهد في هذا المثال الناتج بعد تطبيق :ملحوظة
loopوذلك ألنه معرف تلقائيا داخل أل Declareال يعرف في forالمتغير المكتوب في جمله : مثال
من النوع الحرفي وفي هذا v_nameمن النوع الرقمي والمتغير V_id في هذا المثال تم تعريف المتغيراتاحمد ثم تم كتابه = بشرط أن يكون اسم الطالب v_idالمثال تم تحديد رقم الطالب ووضعه داخل المتغير
ألنه يتمDeclareوهذا المتغير ال يتم تعريفه في I ثم بعدها تم كتابه المتغير Forجمله تكرار باستخدام
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٤٣ -
الموجودة داخل الجدول ثم ننهي جمله Insert مرات لجمله أل ٣ ويحدث التكرار Forتعريفه تلقائيا داخل أل End loop باستخدام Loopأل
:ولكي نرى الناتج نتبع اآلتي
مرات في ٣ ويتم التكرار For صفوف في الجدول وذلك الن يوجد جمله تكرار في الجدول وهي ٣تم أضافه الجدول
SQL CURSOR
و ظيفتة االحتفاظ بعدد كبير من السجالت cursorيوجد في االوراكل عنصر يسمى : CURSOR أل سجالت و تحديد عددها أثناء التشغيل و تسهيل التعامل مع هذه ال
هو عبارة عن وعاء يتم تخزين كميه بيانات أكثر من سجل واحد و هي تشابه جدول CURSORاى أن أل cursorمؤقت يتم إنشاءه في الذاكرة لالستعمال ثم يتم إلغاءه و في هذه الحالة يتم إنشاء أل
: CURSORو يوجد نوعين من أل · IMPLICIT CURSOR : و هذا النوع يتم إنشائه تلقائيا من قبل االوراكل لإلجراء العمليات
.التي تحتاج ذلك أو إجراء عمليات على مجموعة من السجالت DMLعبارات حيث انه ينشط و يؤكد مخرجات
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٤٤ -
!خطأ
· EXPLICIT CURSOR : هذا النوع الخاص بالمبرمج و الذي يقوم بإنشائه لتنفيذ األوامر و
العمليات على مجموعة من السجالت من اختياره و يجب عليك اآلن أن تعرف كيف تتحكم في الجملة
Cursorللتحكم في أل Open , Fetch and Closeانك تستخدم
١. Declare : لإلعالن عن المتغيرات و االستعالمات و عمل اسم ألCursor . ٢. Open Cursor :ل االستعالم تسمى لتنفيذ االستعالمات و المتغيرات و الصفوف المعرفة من خال
Active set و تكون مسموحة لعمليه ألFetch . ٣. Fetch Data From Cursor : تحميل الصفوف داخل المتغيرات ٤. Empty : الفحص الصفوف و الرجوع إلى عمليه ألFetch إذا وجد صفوف ٥. Close : إلغالق ألcursor
Cursor اإلعالن عن أل Cursorفي اإلعالن عن أل INTOارةال تستخدم عب ·داخل Order Byيجب عليك استخدام عبارة sequenceلو كنت تستخدم في الصفوف عبارة أل ·
االستعالم : الصيغة العامة
CURSOR cursor_statment IS Select_statment ;
Declare Cursor مثال في اإلعالن عن أل
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٤٥ -
!خطأ
٢- Open Cursor :
لتنفيذ االستعالم و ليطابق أو يساوى المتغيرات الصفوف CURSORلفتح أل ٣- FETCHING DATA FROM THE CURSOR :
إرجاع الصف الحالي في المتغير و البد أن تحتوى على نفس أرقام المتغيرات و الفحص لكنى نرى اذا كان يحتوى على صفوف cursorأل
cursor غلق أل -٤
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٤٦ -
: cursorو يستخدم أل ***
.مفتوحة أم ال للتعامل معها CURSORل هل للسؤاISOPEN% األمر -- CURSORالسترجاع أرقام الصفوف بدقة في أل ROWCOUNT% األمر -- أم ال CURSORلمعرفة هل يوجد سجالت في أل FOUND% األمر -- و لكن بصيغة نفى FOUND % نفس استعمال األمر NOTFOUND% األمر -- CURSORسجالت من لألخذ ال FETCH% األمر --
%ISOPEN يحضر الصفوف فقط عندما يكون الCURSOR مفتوح
• %NOTFOUND , %ROWCOUNT n %ROWCOUNT :قة السترجاع أرقام الصفوف بد n %NOTFOUND : نستخدمه لتحديد متى سنخرج من ألLOOP .
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٤٧ -
. موظفين واحد تلو اآلخر ١٠مثال السترجاع
Recordو أل Cursorأل
recordممكن أن نحضر قيمها داخل أل cursorالمستعلم عنها في أل و الصفوف :مثال
Cursor For Loopsأل • Cursor For Loops هو اختصار لعمليات ألExplicit Cursor الن ألCursor يكون
قد أغلق loopو أل loopمفتوح و الصفوف قد استرجعت أو أحضرت و تكررت في أل .اتوماتيكيا عندما تكون جميع العمليات على الصفوف قد انتهت
نفسه انتهى اتوماتيكيا في نهاية التكرار عندما يكون أخر صف قد احضر loopأل •
: Cursor For Loopألمر الصيغة العامة ل
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٤٨ -
For record_name In cursor_name Loop Statement 1 ; Statement 2 ;
…………… End loop ;
:بعض المالحظات n ال تقم بتعريف ألRecord الذي يتحكم في ألLoop هدفه فقط داخل ألLoop . n قم باختيار ألCursor من خالل ألLoop . n قم بزيادة ألCursor ب ألParameters يتلوها اسم أل ( ) إذا تتطلب و ذلك داخل
Cursor و ذلك داخل عبارةFor . n ال تستخدم ألCursor For Loop عندما تكون عمليات ألCursor تصحح يدويا .
. For Loops Cursorاستخدام االستعالمات المتعددة في أل . يسمح لك باستخدام االستعالمات المتعددة pl/sqlالن أل cursorلست محتاج أن تعرف أل
Cursorفي أل Parametersاستخدام أل
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٤٩ -
عندما يكون مفتوح و معنى ذلك انك ممكن أن تفتح Cursorتسمح للقيم بالمرور إلى أل Parametersأل و استرجاع استعالمات مختلفة Blockكذا مرة داخل أل Explicit Cursorأل
: الصيغة العامة CURSOR Cursor_name [ ( parameter_name datatype ,…. )] IS Select_Statment ;
PL/SQLمعرف سابقا في أل cursorاسم أل : Cursor_nameأل Parameterاسم أل : Parameter_nameأل Parameterنوع بيانات أل : datatypeأل Intoعبارة استعالم بدون كلمة : Select_statmentأل
Parameterتقوم بمرور القيم إلى اى cursorعندما يفتح أل
: For Update Clauseاستخدام تريد أن تقوم بغلق أل الصفوف قبل قيامك بعمل تعديل أو حذف للصفوف الموجودة تقوم بإضافة عبارة
For Update Clause في استعالم ألCursor إلغالق الصفوف عند فتح ألCursor : الصيغة العامة
Select ……. From …… For Update [ of column_reference ] [Nowait] ;
عمود في جدول مقابل لالستعالم المصنوع : Column_referenceأل يرجع أخطاء االوراكل لو كانت الصفوف مغلقه في مكان أخر : Nowaitأل
For Update : يعتبر أخر عبارة في عبارة االستعالم بعد عبارةOrder By لو كانت موجودة
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٥٠ -
Where Current of Cursorاستخدام لعمليه التعديل أو الحذف الصف الحالي Cursorتستخدم أل
لغلق الصفوف Cursorفي استعالم أل For updateاحتوائها على عبارة Explicit Cursorلإلشارة إلى الصف الحالي من خالل أل Where Current ofاستخدام
. في االستعالمات المتعددة cursorاستخدام أل داخل استعالم أخر و تظهر من () تعالم عادة تكون مغلقة داخل هي عبارة عن اس: االستعالمات المتعددة
من جمله االستعالم و تستخدم whereو يستخدم أيضا في عبارة أل sqlخالل عبارات معالجة بيانات أل Fromأيضا في عبارة أل
: مثال
PL/SQLمعالجه األخطاء في
: تقسم أخطاء البرنامج إلى ثالث أنواع و هي
Syntax Errorالخطاء الهجائي -١
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٥١ -
و هو خطاء في حروف كلمات اللغة و ذلك بكتابه أمر خطاء أو خطاء في قاعدة نحويه ألوامر اللغة مثل اع األخطاء حيث يتم تصميم أوال بأول و هذا هو أسهل أنو End If أو بدون Then بدون Ifكتابه أمر
.بدون الوصول به إلى المستخدم حيث ال يتم ترجمه البرنامج قبل االنتهاء في األخطاء النحوية
LOGIC ERROR الخطاء المنطقي -٢
و هو خطاء في منطق البرامج و معناه انك كتبت البرنامج بقواعد سليمة و عند ترجمته ال تحصل على اى ئل خطاء لكن عند تشغيله تجد أن النتائج خاطئة و يرجع هذا الخطاء إلى وجود خطاء منطقي مثل إشارة رسا
. خطاء IFمعادله خطاء أو استخدام جمله شرط
RUN TIME ERRORالخطاء أثناء التشغيل -٢
عه المبرمج و لم يتعامل و هو ظهور رسالة خطاء للمستخدم أثناء تشغيل البرنامج و ذلك لوقوع خطاء لم يتوقمعه مثل أمر طباعة في حين أن اله الطباعة غير جاهزة فيقوم نظام التشغيل بقطع عمل البرنامج و إعطاء
رسالة خطاء
و هذا النوع من األخطاء يعتبر خطاء فادحا في البرامج و الذي يعطى صور سيئة عن البرنامج الذي يقطع إلعادة التشغيل كل مرة لذلك نناقش في هذه الفقرة كيفية تتالشى هذا العمل تكرارا على المستخدم و يضطر
اى االستثناءات حيث يتم توجيه البرنامج إلى هذا االستثناء عند EXCEPTIONالخطاء و ذلك باستعمال .حدوث خطاء
EXCEPTIONمعنى كلمه
م هو بتناول الخطاء و القيام بعمل و هي جزء من األمر يتم توجيه سير البرنامج إليه عند حدوث خطاء ليقو الالزم عند حدوث الخطاء و كذلك الرسائل المطلوب إظهارها عند حدوث الخطاء
و هي EXCEPTIONSو يوجد ثالث أنواع من االستثناءات
Predefined Exceptionاستثناء معرف § User Defined Exceptionاستثناء من تعريف المبرمج §
Internal Exceptionاستثناء داخلي §
predefine exceptionاالستثناء المعرف من قبل -١
أو predefined لمجموعة من الحاالت و التعامل معها و تسمى oracleو هو استثناء معرف من قبل built-in فمثال هناك خطاء معرف يسمى no data عند قيام جمله select ر بإعادة بيانات وال تعيد يظهno data أو خطاء آخر و هو قيام جمله select بإعادة أكثر من سجل في حين انك تستعمل select into
و لكن oracleحيث تخزن هذه البيانات في متغير سجل واحد و هذه األخطاء يتم التعامل معها من قبل في exceptionوامر في جزء أل لتغيير الرسالة و التعامل مع هذا الخطاء من قبل المبرمج تقوم بكتابه األ
يعرف حاله حدوثه لذلك ما عليك سوى كتابه األوامر oracleنهاية بلوك األوامر وهذا النوع يتميز بان أل التي تنفذ عند حدوث هذا الخطاء
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٥٢ -
user_defined exception خطاء معرف من قبل المبرمج -٢
و له ثالثة user defined تعريفه من قبل المبرمج لذلك يسمى و لكن يتم oracleهذا النوع ال يعرفه أل : أجزاء هي
. exception declaration جزء التعريف ·
فيتم تعريف متغير جديد Oracleوهو جزء اإلعالن عن اسم هذا النوع من الخطاء ألنه غير معرف لدى exceptionمن النوع
exception teasingاختبار الخطاء ·
ال يعرف معناه و ال يعرف وقت حدوثه ليوجه oracleو فيه يتم وضع شرط حدوث هذا الخطاء الن أل exceptionسير البرنامج إلى قسم أل
exception handlingالتعامل مع الخطاء ·
د تعريف و تحديد حاله حدوثه للقيام التقليدي الذي ينتظر أن يوجه إليه الخطاء بع exceptionو هو قسم أل بالزم و تنفيذ األوامر و الرسائل التي يكتبها المبرمج
و من القيم المعرفة ..,exception1,2للعبارة و يوجد عدة أنواع من األخطاء المحددة بكلمات معرفة بديله لدى االوراكل ما يلي
*NO_DATA_FOUND : تستعمل عند تنفيذ أمرSELECT أو CURSOR و لكن لن تعيد بيانات
*TOO_MANY_ROWS : وهى عكس العبارة السابقة حيث تستعمل عندما تكون عدد القيم المسترجعة ث ال يصلح وضعه في متغير واحد كبير بحي SELECTمن األمر
*INVALID_CURSOR : و تنتج عندما يتم التعامل مع متغير على انهCURSOR و لكنه ليس كذلك
*ZERO_DIVIDE : و يعنى حدوث عمليه قسمه على ألZERO
*DUP_VAL_ON_INDEX : ل معناها محاوله االضافه في جدول مع محاوله تكرار القيمة في الحقPRIMARY KEY .
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٥٣ -
الدوال التي تتعامل مع األخطاء
يوجد في االوراكل بعض الدوال التي تتعامل مع األخطاء منها
رقم الخطاء الناتج و تعيد رقم يعبر عن SQLCODE الدالة
تعيد الرسالة المحفوظة لهذا الخطاء SQLERRMو الدالة
: الستعمال هذه الدوال و المتغيرات مثال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٥٤ -
USER DEFINED ERRORS التعامل مع األخطاء المعرفة من المبرمج --
ORACLE هي أخطاء ال يعرفها ال USER DEFINED ERRORSاألخطاء المعرفة من قبل المبرمج
رة و لكنها من وجهة منطق البرنامج أخطاء فمثال عندما تزيد نسبة نجاح الطالب و ربما ال تكون أخطاء مباشيعتبر البرنامج ذلك خطاء في حين ال يعرف االوركل ذلك و بالتالي يقوم المبرمج بتعريف معنى % ١٠٠عن
و حاله حدوث هذا الخطاء و كيفيه التعامل معه
: و يأخذ ذلك التركيب التالي
من قبل المبرمج ثم التعامل معه في قسم أل EXCEPTIONو المثال التالي يوضح كيفيه تعريف خطأ EXCEPTION
و USER DEFINED ERRORو مثال أخر نوضح فيه كيفيه تعريف خطاء من قبل المستخدم من النوع كيفيه التعامل معه
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٥٥ -
OTHERSاستعمال
للتعامل مع األخطاء التي يتم EXCEPTION في قسم األخطاء WHEN OTHERSتستعمل الجملة اى عند حدوث أخطاء أخرى WHEN OTHERES و كأنها تقول WHENالتعامل معها باستعمال جمل
WHEN OTHERSنفذ ما يلي و يوضح هذا المثال استعمال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٥٦ -
: Building Procedure & Functionإعداد الدوال و البرامج الفرعیة
Building Procedure & functionو في ھذه الفقرة سوف نتناول إعداد الدوال و البرامج الفرعیة
:و ذلك من خالل
Pl/sql Permission and Pl/sqlالصالحیات الالزمة لبرامج أل - procedureإنشاء أل - parameter passingإرسال معامالت للبرامج الفرعیة - Functionإنشاء الدوال -
Permission الالزمة لإلنشاء برامج الصالحیات -١
DBAلكي تتمكن من كتابھ دوال أو البرامج الفرعیة في االوراكل البد من أن یمنحھ مدیر قاعدة البیانات
آو من لھ حق في ذلك الصالحیة إنشاء دوال فرعیھ و یتم ذلك كما في المثال التالي
pl/sqlو بھذا تم إنشاء الصالحیات الالزمة إلنشاء برامج أل
n إنشاءProcedure
ال نشاء البرامج الفرعیة Create Procedure یتم استعمال األمر procedureبعد منح صالحیة إنشاء أل
العامة لألمر ھي و الصیغة
CREATE [OR REPLACE ] PROCEDURE procedure_name [(parameter1[mode1] datatype1,parameter2[mode2] datatype2,……….)] IS | AS PL/SQL BLOCK;
CREATE OR REPLACE PROCEDURE أمر إنشاء أو تعدیل البرنامج الفرعي
Procedure_name راد انشائة اسم البرنامج الفرعي الم
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٥٧ -
Parameter أسماء المتغیرات التي تمرر قیمھا
Mode نوع أل parameter و یوجد ثالث حاالت ل أل parameter
( IN , OUT ,IN OUT)و ھم
datatype نوع البیانات التي تأخذھا أل parameter
Pl/sql block رنامج الفرعي و ھو جسم البرنامج الفرعي الذي یقوم بأحداث الب
و ھذا المثال یقوم بإنشاء برنامج فرعى للموظفین و یقوم البرنامج بعمل تعدیل على جدول الموظفین بتعدیل مرتب موظف الذي ترید زیادة مرتبھ
raise_salary النشاء برنامج فرعى باالسم create procedureففى السطر االول تم استعمال االمر
وكذلك تحید طبیعتھ اذا v_id و ھو raise_salaryو فى السطر الثانى نحدد متغیر واحد فقط للبرنامج الفرعى او اخراج القیم فیھ اى یصلح الستقبال القیم عند استدعاء الدالھ out او inكان
اما فى السطر الثالث یبدا البرنامج الفرعى و یبدا بالعالن عن عن المتغیرات
و ھى بدایھ االوامر التى تنفذ begin الكلمھ ٤اما فى السطر رقم
ة الذى یقوم بتعدیل مرتب الموظف او الذى استدعاءا update وھى المر تعدیل sql جملھ ٦٫٧٫٨اما فى السطور
تم انھاء البرنامج الفرعى و كتابھ اسم البرنامج ٨و فى السطر رقم
procedureتعدیل ال
حیث یقوم االمر بعمل تعدیل اذا create or replace procedureو یتم تعدیل البرنامج الفرعى بإستعمال االمر لمثال السابق كان البرنامج الفرعى موجود او ینشىء برنامج جدید و بالتالى فى ا
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٥٨ -
بھذا السطر١ یتم استبدال السطر رقم
create or replace procedure raise_salary للقیام بتعدیل اى كود بداخل البرنامج الفرعى
و اآلن نرى النتیجة التي سیقدمھا البرنامج الفرعي
PARAMETERS باستعمال PROCEDUREإنشاء أل
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٥٩ -
أو البرنامج الفرعي functionاخل أقواس الدالة من الضروري جدا اإلعالن عن المتغیرات كمعامالت دprocedure و ذلك الن المعامالت توسع استعمالھا و المعامالت تأخذ ثالثة أنواع :
و ھو الذي یستقبل قیمة عند استدعاء الدالة و ال یمكن إعادة قیمة فیھ لمكان االستدعاء : INالنوع - الذي یأخذ قیمة تعود لمستدعى الدالة فقط و ال یستعمل الستقبال قیم عند و ھو : OUTالنوع -
.االستدعاء و ھو النوع الذي یسمح باستقبال القیم عند االستدعاء فیھ و كذلك إعادة قیم للخروج : IN OUTالنوع -
فیھ
ما یلي الذي تم إنشاءه ك rasie_salaryو یالحظ عند استدعاء البرنامج الفرعي
Execute raise_salary (7788) ;
كمعامل لھ بالتالي یتم ٧٧٨٨ مع إرسال القیمة raise_salaryفي ھذا السطر تم استدعاء البرنامج الفرعي ثم استعمالھ داخل السطور لتعدیل مرتب in المعرف كمعامل من النوع v_idاستقبال القیمة في المتغیر
لتالي یمكن استدعاء البرنامج الفرعي أكثر من مرة مع تغییر كود الموظف و با٧٧٨٨الموظف الذي كوده المطلوب حذفھ
INكیفیھ استعمال المعامل من النوع
INكیفیة التعامل مع المعامل و المثال السابق یوضح
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٦٠ -
:نالحظ ھذا المثال
وذلك ألنھ یتم إرجاع قیم إلى Outفي ھذا المثال ظھر ھذا الخطأ ومعناه انھ البد من استخدام معامالت من النوع فانھ یظھر ھذا الخطأ وذلك ألنھ المعامالت التي من النوع Inالكود ولكن في حالھ استخدام معامالت من النوع
INجع قیم تستقبل قیم فقط وال تر
Outلذلك سنقوم باستخدام المعامالت من النوع
OUTاستخدام المعامل من النوع
و ھذا النوع یأخذ قیمھ تعود لمستدعى الدالة فقط ال یمكن أن یستخدم الستقبال قیم عند االستدعاء
و ھذا المثال یوضح ذلك
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٦١ -
نقوم بعمل التالى OUTو لكى نشاھد قیم المعامل من نوع
VARIABLE و ذلك بإستخدام االمر HOST VARIBALESنقوم بإنشاء -١ hostvariableئھا بإعطائھ المتغیرات التي قمنا بإنشا query_emp procedureنقوم بإحضار أل -٢
OUTكا معامالت من النوع PRINTلكي نقوم بمشاھدة النتیجة نستخدم آمر -٣
و كما سنرى اآلن من خالل المثال السابق الذي قمنا بعمل
:Out parameterمثال اخر على استخدام
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٦٢ -
ع أي یرجOut من النوع ID وتم إعطاءه معامالت وھي agc12 یسمى Procedureفي ھذا المثال تم تكوین أي یرجع قیمھ في الكودOut وھو من النوع Nameقیم إلى الكود والمعامل اآلخر ھو االسم
ثم نھایھ ال NameوIDثم تم وضع القیم الموجودة داخل االعمده رقم الطالب واسم الطالب داخل المعامالن Procedure
: ولنرى الناتج من ھذا االجراء كما في المثال االتي
وھو ID نعرف أوال المعامل Nameوالمعا مل ID وھي Procedureلطباعھ المعامالت الموجودة داخل أل ثم Execute باستخدام Procedureعاء أل ثم نقوم باستد من النوع الحرفيNameمن النوع الرقمي والمعامل
ونضیف إلیھ المعامالت ثم نقوم بعمل طباعھ للمعامالت كما موضح في الشكل السابقProcedureاسم أل Out وبھذا نكون قد تعرفنا على المعامالت التي من النوع
IN OUTكیفیھ استخدام المعامل من النوع
IN OUT عمل معامل من النوع و سوف نرى اآلن مثال عن كیفیھ
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٦٣ -
حیث یقم باستقبال قیم و إرجاعھا مرة أخرى بشكل بھذا IN OUTو في ھذا المثال تم عمل معامل من النوع 0575-633(800)وضح في المثال الشكل كما ھو م
و اآلن سوف نرى كیفیھ مشاھدة ھذا البرنامج الفرعي
: و ذلك بعمل
VARIABLE و ذلك باستخدام األمر HOST VARIBALE إنشاء -
بالقیم HOST VARIABLEنقوم بتزوید أل - HOST و بإضافة إلیھ أل FORMAT PHONEإحضار البرنامج الفرعي و ھو -
VARIABLE كأنھا IN OUT PARAMETER PRINTللمشاھدة نستخدم أمر -
و كما سنرى اآلن في ھذا الشكل
:IN OUT Paramterمثال آخر الستعمال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٦٤ -
IN OUT ھذا المعامل نوعھID ویأخذ معامل واحد وھو Agc13 یسمى Procedureفي ھذا المثال تم تكوین أي یقوم باستقبال قیم وإرسال قیم إلى الكود عند استدعاءه
:ولمشاھده النتائج نتبع اآلتي
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٦٥ -
أي انھ یستقبل قیم ویخرج قیم إلى الكودIn outنالحظ في ھذا المثال أننا نرید أن نطبع المعامل الذي من النوع
IN وذلك الن المعامل ٥في أول جزء تم تعریف المعامل من النوع الرقمي ثم تم إعطاء المعامل القیمة رقم Paramter فقط وفي المرة الثانیة تم عمل وبالتالي یستقبل القیم التي تعطى لھExecute ثم اسم أل Procedure
أي انھ یخرج قیم للكود ونالحظ اختالف الناتج في Outثم نكتب اسم المعامل وذلك ألنھ یعتبر معامل من النوع حظ الناتج كلتا الحالتین ففي الحالة األولى یكون الناتج مساو للقیمة التي نعطیھا للمعامل وفي الحالة الثانیة نال
حسب رقم الطالب الموجود في الجدول
داخل DEFULTE OPTION FOR PARAMETER قیم أساسھ PARAMETERإعطاء أل البرنامج الفرعي اى عند عدم إعطاء المعامل قیم تكون ھي القیم االساسیھ لھ
و
: نرى ذلك من خالل المثال التالي
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٦٦ -
و اآلن نرید أن نجرب البرنامج الفرعي الذي قمنا بإنشائھ فنقوكم بتشغیلھ و إضافة بیانات إلى جدول األقسام كما سنرى في المثال االتى
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٦٧ -
pl/sqlیمكننا إحضار البرامج الفرعیة من اى أداة أو اى لغة تدعم أل
إحضار البرامج الفرعیة من خالل البوكات الغیر مسماه
raise_costو سوف نقوم بإحضار برنامج فرعى باسم
v_idحیث یأخذ معامل
كما سنرى اآلن في ھذا المثال و
األخطاء التي تؤثر على البرامج الفرعیة
علیھ بواسطة البرنامج الفرعي عندما تقوم بتطویر اى برنامج فرعى و یكون بداخلھ برنامج فرعي أخرى منادى المتطور فعلیك أن تكون مدرك بالتأثیرات التي تصحح أو ال تصحح
و عندما تكون یظھر الخطاء في البرنامج الفرعي تقوم وحدة التحكم في البرنامج بالذھاب إلى جزء االستثناءات بلوك فتقوم وحدة التحكم بالذھاب إلى الذي یقوم بتصحیح الخطاء و إذا تم تصحیح ھذا الخطاء الموجود في ال
البرنامج الفرعي
تكون جزء من الحدث EXCEPTION تنفذ بعد أل DMLو اى عبارات
و إذا لم یقم جزء االستثناءات بتصحیح ھذه األخطاء فیقوم الخطاء بانتشار و الذھاب إلى التطبیق الذي نستخدم فیھ ھذا البرنامج الفرعي
من قاعدة البیانات ذف البرنامج الفرعيحو اآلن یمكننا
DROP PROCEDUREو ذلك باستخدام أمر
: الصیغة العامة لألمر ھي
DROP PROCEDURE procedure_name ;
: مثال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٦٨ -
Creating PL/SQL Functionإنشاء داله **
PROCEDURE هي برنامج فرعى مثلPL/SQLفي جميع اللغات بما فيها أل : Function الدالة الموجودة باللغة SQRT(X) و لكن يختلف عنه في أن الدالة ال يمكن أن تعيد أكثر من قيمه فمثال الدالة
داله أخرى و هكذا اى Xجزر التربيعى للقيمة تعيد قيمه واحدة فقط و هي ال
كما SQL PLUS في بيئة البرنامج CREATE FUNCTION و يتم إنشاء الدالة باستعمال األمر هو موضح
الصيغة العامة لألمر هي
CREATE [ OR REPLACE ] FUNCTION function_name [ (parameter 1 [mode1] datatype1 , Parameter 2 [mode2] datatype 2 , ………………….. ) ] RETURN datatype IS | AS PL/SQL Block ;
اسم الدالة : function_name أل
الذي يقوم بتمرير القيم داخل الدالة PL/SQLمتغير في أل : parameter أل
parameterو هو نوع أل : mode أل
parameterو هو نوع بيانات أل : datatype أل
functionنوع البيانات المخرجات الموجودة في أل : return datatype أل
: مثال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٦٩ -
Or replaceومعناھا كون ثم تم استخدام Create باستخدام األمر agc20المثال تم تكوین دالھ تسمى في ھذا ویتم إعطاء agc20 وھي Function ثم اسم أل Functionألنھ من الممكن أن یحدث تعدیل في الدالة ثم نكتب
من النوع الحرفي وھو name من النوع الرقمي والمعامل الثاني وھو االسم idمعامالت لھا وھي
أن نستخدم معامالت منFunction أي انھ یستقبل قیم وال یصح داخل أل INونالحظ أن المعامالت من النوع وبعدھا IS أي یستقبل القیمة من الدالة ثم نكتب IN وذلك الن الدالة تقوم باحتساب قیم لذلك نستخدم Outالنوع
داخل جدول الطالب ومن شروط الدالة أنھا البد أن ترجع Insertنقوم بكتابھ الكود وھو ھنا عبارة عن جملھ ثم اسم المتغیر التي ترجع return حیث أننا نقوم بكتابھ idقیمھ ھذه القیمة توجد داخل متغیر ھذا المتغیر ھنا ھو
Agc20 ثم اسم الدالة Endفیھ القیمة ثم ننھي الدالة بكتابھ
مثال آخر
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٧٠ -
وھو من نفس نوع بیانات P_id ھذه الدالة تأخذ معامل ھو Get_salفي المثال السابق تم تكوین دالھ تسمى تقوم باسترجاع نوع البیانات الرقمیة أرقام الموظفین الموجود داخل جدول الموظفین وھذه الدالة empnoالعمود
من النوع الرقمي أو نفس نوع بیانات عمود المرتب الموجود في v_salaryفقط ثم تم تعریف متغیر یسمى وھو ھنا عبارة عن تحدید مرتب الموظفین داخل المتغیر الذي تم تعریفھ pl/sqlجدول الموظفین ثم تم كتابھ كود ثم v_salaryھا البد أن ترجع بیانات ھذه البیانات سیتم وضعھا داخل المتغیر سابقا ومن خصائص الدالة أن
Get_sal ثم اسم الدالة وھي Endننھي الدالة باستخدام
من النوع الرقمي ثم نستدعي الدالة باستخدام األمر g_salaryولمشاھده النتائج نعرف أوال اسم المتغیر وھو
Executeھ اسم الدالة وقیمھ المعامل الذي بداخل الدالة الن المعامل من النوع ثم اسم المتغیر ونعطي لIN أي Get_sal(7788) البد من إعطاءه قیمھ كما ھو موضح بالشكل
: مالحظه
قد يستقبل معامل أو أكثر أو قد ال يستقبل و كذلك يعيد نتيجة أو أكثر أو ال يعيد procedure في أل نهائيا
قد تستقبل معامل أو أكثر آو قد ال تستقبل و لكن ال تستطيع إال أن تعيد قيمه واحدة و ال functionالدالة الن الدالة ال تعيد إال قيمه واحدة و تعيدها باستعمال األمر in out أو outيصلح أن تحدد نوع المعامل
return تكون نوع المتغيرات و المعامالت من األنواع االساسيه في االوراكل و الدالة البد أن تعمل و البد أن group و ليس single rowعلى قيمه واحدة sql في تعبيرات أل functionاستخدام الدوال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٧١ -
من المرتب و نقوم % ٨وھذه الدالة تقوم بعمل ضریبة على المرتب بمقدار taxنقوم بعمل دالھ اسمھا
في جملة استعالم حیث نطلب منھ إحضار اسم و رقم و مرتب و الضریبة التي sql باستخدامھا في أل ١٠م الذي سیطبق علیھ ھذه الدالة ھو القسم رقم ستوضع على المرتب من جدول الموظفین على أن القس
في اى وقت عندما یكون لھا استخدام sqlو الدوال التي تنشاھا ممكن أن تنادى علیھا في بیئة أل
ال آخرمث
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٧٢ -
وھو من النوع الرقمي ویستقبل قیم فقط ID تأخذ المعامل agc21 في ھذا المثال تم تكوین دالھ حدیده تسمى ھذا المتغیر تم وضع أرقام تلیفون v_noلرقمي ثم تم تعریف متغیر جدید وھذه الدالة ترجع بیانات من النوع ا
قیمھ المعامل وبذلك تم تكوین الدالة= الطالب داخل ھذا المتغیر بشرط أن یكون رقم الطالب
إذا أردنا المناداة على الدالة كما في المثال السابق
ونعطي اسم الدالة Executeدالة باستخدام األمر من النوع الرقمي ثم ننادي على الg_noأوال نعرف متغیر ونالحظ ذلك في الناتجg_no ثم نقوم بطباعھ ھذا المتغیر وھو agc21(1)وقیمھ المعامل بداخلھا مثل
sqlالقواعد و القيود الالزمة عند مناداة الدالة من أل
ب أن تكون مخزنة أو محفوظة الدالة يج · . فقط IN PARAMETERالدالة تأخذ · الموجودة PARAMETER في أل PL/SQL ليس SQLتأخذ أنواع بيانات أل ·
Table أو أل Boolean مثل أل FUNCTION في أل PL/SQL و ليس في SQL إرجاع أنواع بيانات صالحه في · DML ال يجب أن تحتوى على جمل · في نفس الوقت على جدول واحد مثال إذا DELETE و UDATEال يصلح عمل ·
في األول و أنت في آخر الجملة مثال حولت تعمل UPDATE و حاولت تعمل FUNCTIONكان عندك DELETE ال يصلح سوف يقوم بالرفض
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٧٣ -
REMOVING FUNCTIONلعمل حذف للدالة
:الصيغة العامة
REMOVE FUNCTION function_name ;
اسم الدالة function_nameحيث
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٧٤ -
واآلن البد أن نعرف بعض الصالحيات التي يتم إعطاؤها للمستخدم من قبل مدير قاعدة البيانات
البد أن (Table,View,Subprogramme) وهي عبارة عن Objectلكي يسمح للمستخدم أن يشير إلى Objectيقوم مدير قواعد البيانات بإعطاء صالحيات السماح للمستخدم بتموين وتعديل في هذه أل
صالحية يقوم مدير قاعدة البيانات باعطاءها للمستخدم ولكن من هذه الصالحيات عمل ٨٠ويوجد أكثر من Create أو Alter أو drop أو أي صالحيات أخرى مثل Grant alter any table to ahmed ويتم إعطاء
Sys أو Systemهذه الصالحيات من خالل
موجودة داخل قاعدة البيانات مثل Objectم أل وعند إعطاء الصالحية البد أن نعطي اس
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٧٥ -
Grant alter on emp to ahmed
مثلSub programmeوبالنسبة للدوال واإلجراءات البد أن نعطي للمستخدم صالحية تكوين هذه أل
Create procedure وعند استخدام كلمه Any داخل الصالحية فإنها تسمح للمستخدم أن يقوم بعمل Create الموجودة على قاعدة البيانات أو أي قاعدة بيانات أخرىObject ألي من أل Drop أو Alterأو
فقطCreate procedureليست ضرورية وتستخدم في حاله Anyونالحظ أن كلمه
والبد عند استدعاء اإلجراء أو الدالة أن يكون للمستخدم صالحية المناداة على اإلجراء أو الدالة أي عمل Execute ويتم إعطاء هذه الصالحية في حاله أن المستخدم ليس هو مالك هذا ألObject
:واآلن سنرى بمثال كيفيه إعطاء هذه الصالحيات
System/manager أوال ندخل باسم المستخدم وكلمه المرور
NameوID هذا الجدول يحتوي على عمودين هما Fadyثانيا ننشئ جدول داخل المستخدم يسمى الجدول
:كما هو مبين في الشكل االتي
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٧٦ -
nameوid وبه االعمده fadyتم تكوين الجدول يسمى جدول
تخدم تم تكوینھ سابقا في ھذا المثال تم إعطاء صالحیة اإلتیان بالبیانات من جدول لمستخدم یسمى احمد وھذا المس System/managerداخل
وبھذا یستطیع المستخدم احمد أن ینظر إلى الجدول فاضي ویأتي منھ بالبیانات بطریقھ مباشره
أن یرى ھذا الجدول اویحدد بیانات منھ؟Shereenولكن ھل یستطیع مستخدم آخر ولیكن
Procedureلك عن طریق أن یقوم المستخدم بتكوین بالطبع ممكن أن یقوم مستخدم آخر بان یرى الجدول وذ لھ القدرة على قراءه البیانات من الجدول كما سنرى اآلنProcedureجدید ھذا أل
Ahmed/ihab باستخدام Connectعند عمل : أوال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٧٧ -
:Procedureثانیا یتم تكوین
Out Parameter من النوع v_id وإعطاءه معاملHany2یسمى Procedureتم تكوین
Fady من جدول Select هذا المستخدم سيعطى له صالحية عمل Shereenسمى ثم نكون مستخدم جديد ي الذي قام المستخدم احمد Procedureولكن بطريقه غير مباشره وذلك عن طريق انه يقوم بالمناداة على أل
:بعمله وسنرى ذلك في هذا المثال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٧٨ -
بالرغم من أنھا لیس لھا Fady1لھا القدرة أن ترى البیانات داخل الجدول Shereenوبھذا فان المستخدمة Hany3 الذي تم تكوینھ وھو Procedure من ھذا الجدول ولكنھا تستطیع من خالل أل Selectصالحیة عمل
الجدول وھذه تسمى بالطریقة غیر المباشرةأن ترى البیانات في
وبھذا نكون قد تعرفنا على الطریقة المباشرة والطریقة الغیر مباشره للدخول على البیانات في الجدول
Execute البد أن يكون المستخدم له الصالحية على عمل Procedureوللتأكد من أن المناداة على أل
:نرى المثال اآلتي
من النوع الرقمي ثم v_id لها معامل واحد وهو agc15في هذا المثال تم تكوين داله جديدة هذه الدالة هي في الجدول Selectنفيذ هذا اإلجراء يقوم بعمل ومعناها لو أن المستخدم له صالحية عمل تAuthidتم كتابه
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٧٩ -
وهي عبارة عن أسماء الجداول أو المكتبات أو أل إجراءات أو الدوالObjectلتحديد أسماء أل
:مثال
وهذا ما يوضحه الناتج USER_OBJECT الموجودة داخل جدولObjectفي هذا المثال تم تحديد أسماء أل
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٨٠ -
procedure , function , package , package body للوصول إلى نص user_sourceو يستخدم أل كل منها تحتوى على عمود dba_source و all_sourceمخزنة و يقوم أيضا بفحص مشاهدات أل
و لو كان ملف المصدر غير متاح يمكنك استخدام بيئة أل objectو لمالك أل و ه ownerايضافى وهو sql*plus إلعادة إنشائها من خالل أل user_source
:مثال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٨١ -
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٨٢ -
للحصول على نص مصنف الخطاء
أو تستخدم لمشاهدة األخطاء في أوامر أل USER_ERROR data Dictionary viewوتستخدم SQL*PLUS
كل منها تحتوى على عمود ايضافى ALL_ERRORS AND DBA_ERRORSو يستخدم أيضا لفحص OWNER لمالكي أل OBJECT .
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٨٣ -
للقيام USER_ERRORS data dictionary view من خالل SQLو في هذا المثال نستخدم عبارة أل بعمليه مشاهدة األخطاء الموجودة في البرنامج
: Packageحزم الدوال و البرامج الفرعية
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٨٤ -
في لغة االوراكل و تحت اسم يعبر عن الغرض من PL/SQLو هي احد الطرق المتاحة لتجميع أوامر أل هذه األوامر
و دائما يسعى التطوير في طرق البرمجة إلى النظام و اختصار أوامر البرامج لتسهيل إعادة استخدامها
التي تناولناها فبدال من كتابه function و الدوال procedure البرامج الفرعية و كانت أول هذه الطرق كل مرة في أكثر من موضوع و عند االحتياج إليها يعاد كتابتها ظهرت فكرة الدوال و PL/SQLأوامر أل
تؤدى غرض procedure أو functionالبرامج الفرعية التي تقوم بتجميع مجموعة األوامر و إنشاء داله و ليس هناك الحاجة إلعادة كتابه سطورها functionمعين و عند االحتياج لهذا الغرض يتم استدعاء الدالة
.مرة أخرى و هذه هي أول خطوة حيث يتم اإلنشاء مرة واحدة و االستدعاء أكثر من مرة
و البرامج Functionوال لتزيد األمر تنظيما فبدال من إنشاء كثير من الد Packageو جاءت فكرة أل لغرض معين و ليكن ) الحزمة ( Package المتناثرة و غير المنتظمة يتم إنشاء أل Procedureالفرعية بإرسال الرسائل Procedure , Functionمجموعة من دوال ) إنشاء( مثال ثم تجميع messageالرسائل
message داخل هذه الحزمة Package يصبح لديك مكتبه من الحزم و بهذا األسلوبPackages و ليس : الدوال فمثال
message packageحزمة الرسائل
validation packageحزمة مراجعة البيانات
menu packageحزمة التعامل مع قوائم االختيارات
و بهذا أصبح األمر أكثر نظاما
. Packageمزايا استعمال أل
التي تخص موضوع واحد في حزمة procedure و البرامج الفرعية functionتجميع الدوال -١ Packageواحدة
الخاصة بهم فقط وال تحتاج لفتح كل packageيتم استعمال الدوال و البرامج الفرعية بفتح أل -٢ داله او برنامج فرعى على حدة
داخلها procedures أو function عند استدعاء داله packageيتم اإلشارة إلى اسم الحزمة -٣ بالشكل التالي
( ) package . function
و هذا األسلوب يعطى شيء من التنظيم
ج الخاصة بالدوال و البرام pl/sql يمكنك من إخفاء نصوص أوامر package إنشاء و استعمال أل -٤ الفرعية حيث يمكنك ترجمتها و استعمالها دون الرجوع لنص البرنامج
سهوله عمليه الصيانة على الكود باستخدام الجزم -٥
و تتكون الحزم من جزئيين
و فيه يتم اإلعالن عن المتغيرات العامة و كذلك PACKAGE SPECIFICATIONالجزء األول و المقصود باإلعالن عنها اى PROCEDUREمج الفرعية و البرا FUNCTIONاإلعالن عن الدوال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٨٥ -
بالنسبة RETURN VALUEكتابه تعريف اى اسم الدالة و معاملتها و أنوعها و كذلك القيمة المرتجعة PL/SQLللدوال و ال يتم كتابه سطور أوامر
و الصيغة العامة إلنشاء الجزء األول هي
CREATE [OR REPLACE] PACKAGE package_name IS | AS Puplic type and item declarations subprogram specifications END package_name;
: الجزء الثاني
PACKAGE BODY) سطور الدوال(قسم األوامر
التي PL/SQL ألنة يحتوى على سطور أوامر PACKAGE BODYيسمى هذا القسم بجسم الحزمة لدوال و البرامج الفرعية فالقسم األول ما هو إال إعالن و تعريف ألسماء الدوال و لكن هذا القسم تتكون منها ا
هو الذي يحتوى على سطور األوامر التي تحقق أعمال الدوال وبدونها تصبح الدوال بالتالي حزمة البرامج PACKAGE المستحقة و لكنك لم تقم ليس لها قيمة فتخيل لو انك كتبت عنوان داله تقوم بحساب الضريبة
بكتابه األمر التي تقوم بحساب هذه الضريبة فهذا ليس له معنى
و جسم الحزمة PACKAGE SPECIFICATIONو هذا ما يحدث بالضبط بالنسبة لعنوان الحزمة PACKAGE BODY
: و الصيغة العامة إلنشاء الجزء الثاني ما يلي
CREATE [OR REPLACE ] PACKAGE BODY package_name IS | AS Public type and item declarations Subprogram specifications End package_name ;
packageخطوات إنشاء حزمة الدوال
: يتم اإلنشاء بالخطوات التالية
package specificationإنشاء قسم التعريفات -١
و كذلك اإلعالن عن المتغيرات العامة procedures و أل functionم اإلعالن عن الدوال و فيه يت
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٨٦ -
package body إنشاء جسم الحزمة -٢
pl/sqlو فيه يتم إنشاء الدوال و البرامج الفرعية التي تم اإلعالن عنها في قسم التعريفات و ذلك بكتابه أوامر
التي تحقق الغرض من الدوال
و لتوضيح ذلك سوف نقوم بعمل مثال بسيط
و يبدأ ذلك بإنشاء أل sql plus بسيطة بكتابه األوامر في بيئة أل packageهذا المثال يوضح كيفيه إنشاء package specification
بها اإلعالن عن الدوال و السطور simplepkg باالسم package specificationو بهذا تم إنشاء أل
package bodyاإلجراء السابق ) جسم(التالية تقوم بإنشاء سطور
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٨٧ -
packageحذف أل
على خطوتين packageيتم إلغاء أل
وذلك بالصيغة التالية package specإلغاء أل : األولى
Drop package package_name;
package اى اسم أل package name ثم أل drop packageو فيه يتم استعمال األمر
package bodyف أل حذ: الثانية
و يتم باستعمال الصيغة
Drop package body package_name ;
اى اسم أل package name ثم أل Drop Package bodyفي هذه الصيغة يتم استعمال اآلمر Package و بالتالي يتم حذف إلى package body
overloadingإعداد أكثر من داله بنفس االسم
خاصية تسمى function أو الدوال procedureصائص المتاحة عند إنشاء اإلجراءات من الخ overloading و هي من الخصائص المشهورة في لغات البرمجة في مفهوم oop
(object oriented programming ) و معناه أمكانيه إنشاء أكثر من إجراء procedure أو داله function بنفس االسم بشرط اختالف المعامالت و يفيد ذلك بإنشاء كثير من الدوال التي تؤدى أغراض
متقاربة بنفس االسم
:و لتوضيح كيفيه إنشاء أكثر من داله بنفس االسم و كيف يتم التفرقة بينهم عند االستدعاء تابع المثال التالي
إنشاء تعريف الحزمة -ا
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٨٨ -
إنشاء جسم الحزمة -٢
في هذه السطور يتم إنشاء جسم الحزمة و بالتالي إنشاء سطور الدوال المعرفة مسبقا في جزء التعريف حيث و الدالة الثانية VERSION 1 بمعامل واحد تعيد العبارة () TESTFUNيتم إنشاء الدالة
TESTFUNC() بمعاملين تعيد العبارة VERSION 2
: إنشائها نقوم بعمل االتى و لتجربه استدعاء هذه الدوال بعد
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٨٩ -
one-time-only procedureإنشاء أل
باستخدام المستخدمين و يعرف اتوماتيكيا و ينفذ مرة واحدة فقط عندما نقوم باسترجاع حزمة البرامج أوال
فعلى سبيل المثال
في أول مرة و المشار tax_rates توضع كأنها قيمة في جدول أل taxفي هذا المثال القيمة الحالية للمتغير taxes_packageيها من قبل حزمة البرامج إل
one-time-only procedureو عندما نقوم بوضع المتغيرات على العام أو الخاص اتوماتيكيا باستخدام فعند إنشائها تكون معقدة جدا وذلك باستخدام تلك المتغيرات و في هذه الحالة اليجب أن نضع المتغيرات في
one-time-only procedure وضعها اتوماتيكيا في حاله جزء التعريف الن القيم يعاد
في حزم البرامج sqlالقيود الالزمة للدوال المستخدمة ب أل
يقوم االوراكل بتنفيذ جمل االستعالمات التي تتطلبها الدوال المخزنة و هي يجب أن تعرف في الجزء الغير رامج في قاعدة البيانات مؤثر الذي يقوم بتغيير جداول و متغيرات حزم الب
أما في الجزء المؤثر قد يؤجل عمليه تنفيذ االستعالم الذي يستسلم لألمر و يؤدى إلى نتائج غير معروفة أو تصليح حاله متغيرات حزم البرامج من قبل المستخدم
sqlل و إليك بعض القيود التي يجب أن توضع أو تطبق على الدوال المخزنة التي تنادى على متغيرات أ
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٩٠ -
الدوال يجب أن ال تقوم بعمل تعديل في الجداول الموجودة على قاعدة البيانات فإذا قمت بتعديل · فإنك ال يمكنك أن تقوم بعمليات التعديل و الحذف و اإلدخال
رات حزم البرامج ال يمكن أن تنفذ بعيدا الدوال التي تقوم بقراءة و كتابه القيم من متغي · يمكن أن تكتب في قيم متغيرات حزم select , values ,setالدوال التي تنفذ بواسطة الكلمات ·
البرامج
pl/sql PARAGMA RESTRICT_REFERENCEفحص القيود في أل
فإذا كان تم كسر القواعد أم ال و دوال حزم SQLعلى جمله أل يقوم المستخدم بتعريف الدالة التي تنادى لعمل فحص إذا تم كسر القاعدة أم ال PARAGMA RESTRICT_REFERENCESالبرامج تستخدم
و لنقاء مستويات دوال حزم البرامج
PARAGMA RESTRICT_REFERENCESنستخدم
و الصيغة العامة لألمر هي
PARAGMA RESTRICT_REFERENCES ( function name, WNDS , [,WNPS] [,RNDS] [,RNPS]);
WNDS : تعنى انه لن يكتب اى حاله في قاعدة البيانات اى إننا ال يمكننا التغيير في جداول قاعدة البيانات للدالة
WNPS : ت الموجودة في تعنى انه لن يكتب اى حاله في حزمة البرامج وال يمكنك التغيير في قيم المتغيرا حزمة البرامج للدالة
RNDS : تعنى انه لن يقرا اى حاله في قاعدة البيانات و ليمكننا أن نقوم باالستعالم عن اى جدول في قاعدة البيانات للدالة
RNPS : تعنى انه لن يقرا اى حاله في حزم البرامج و ال يمكن إرجاع القيم للمتغيرات العامة في حزم دالة البرامج لل
تعيين مستوى النقاء للدالة في حزم البرامج عندما نقوم بإنشاء دوال في حزمة برامج
و يؤكد مستوى النقاء للدالة في حزمة البرامج مدى الدالة التي تسمح لعمليات قاعدة البيانات
و عندما تقوم بتعيين مستوى النقاء باستخدام المحلل أو المصنف
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٩١ -
PRAGMA RESTRICT_REFERENCES
لفرض داله حزم البرامج بالقراءة أو الكتابة إلى الوصول PL/SQL تكلم محلل أل PRAGMAفإن أل إلى جدول قاعدة البيانات
يؤدى ذلك إلى انتهاك أل FUNCTION BODYو إذا كنت تحاول في تصنيف أو تحليل حسم الدالة PRAGMA و تعطى خطأ
د بالفحص في جسم الدالة على أيه حال جسم داله حزم البرامج تخفى االوراكل ممكن أن يفرض هذه القواع مصنف / وال تبقى إال المواصفات الوحيدة و تبقى ظاهرة لذلك يجب عليك أن تستخدم محلل
PRAGMA RESTRICT_REFERENCES لدوال حزم البرامج
مثال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٩٢ -
في قاعدة البيانات البعيدة لذا أنت تحتاج إلى sqlو في هذا المثال نجد أن الدالة تنادى على عبارات أل باستخدام PRAGMA RESTRICT_REFERENCESالتصريح على نقاء الدالة باستخدام األمر
الن الدالة البعيدة يمكن أن ال تقوم بقراءة و كتابة متغيرات الحزم وال RNPS,WNPS,WNDSالمستويات و لو أن حزم البرامج تحتوى على عدة دوال SQLفي جداول قاعدة البيانات عندما نستدعى عبارات أل
بتطبيق آخر داله PRAGMAبنفس االسم تقوم أل
االستعالمات و يمكننا إحضار أو استرجاع دوال حزم البرامج في جمل
كما سنرى في هذا المثال
:األحداث على قاعدة البيانات
تنفذ مع عملیات أل Pl/sql وھي عبارة عن جمل أل Triggerتسمى األحداث على قاعدة البیانات باالسم DML وعملیات أل DML كما تعرفنا سابقا عبارة عن (Insert,Update,Delete) ونالحظ أن ھذه الجمل
ات أو قاعدة البیانViewتكون مرتبطة بالجداول أو أل
بصوره تلقائیة دون تدخل من المبرمج أو المناداة علیھا داخل الكود Triggerویتم تنفیذ ھذه الجمل أو أل داخل الكودFunction أو أل Procedureالمكتوب مثل المناداة على أل
:ویوجد نوعان من األحداث التي یتم تنفیذھا
١-Application trigger:
موجودة على أل DMLتطبیقھ على حدث ھذا الحدث یحتوي على جمل یتم Triggerوھي عبارة عن Applicationمثل ألForms
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٩٣ -
٢- Database trigger:
التي تحدث على البیانات الموجودة في الجدول مثل أضافھ صف أو DML على أحداث أل Triggerیتم تنفیذ أل التعدیل في صف أو حذف صف
إذا حدثت أحداث معینھ على قاعدة البیانات مثل الدخول على قاعدة البیانات ویتم أیضا تنفیذ ھذه األحداث أیضا (Logon) أو (Logoff)
Create, Alter عبارة عن DDL وال Trigger مع أل DDLویتم السماح باستخدام جمل أل
متى یتم تنفیذ ھذه األحداث ؟:ولكن السؤال ھو
تحدید وقت حدوث الحدث حیث انھ یتم تحدید ما إذا كانت ھذه الجمل یتم تنفیذ ھذه األحداث كیفما یقوم المستخدم ب تنفذ قبل أو بعد ھذه األحداث وسنتعرف اآلن على توقیت حدوث DMLالبرمجیة التي تحتوي على جمل أل
:الحدث
After : ومعناھا انھ یتم تنفیذ الحدث بعد مثال عملیھ االضافھ أو التعدیل أو الحذف في الجدول
Before : ومعناھا انھ یتم تنفیذ الحدث قبل حدوث عملیات ألDML على الجدول مثل قبل االضافھ في الجدول أو قبل عمل تعدیل في الجدول أو قبل عمل حذف في الجدول
٣-Instead of: یتم استخدامInstead of ومعناھا بدال من احد عملیات DML في الجدول وتستخدم لتحسین فقطView ویتم استخدامھا مع أل في الجدولDMLعملیات أل
وسیتم الحقا معرفھ كل من ھذه األنواع بالتفصیل
؟Triggerولكن السؤال ھو لماذا نقوم بإنشاء
إذا أردنا بعد عملیھ معینھ مثل االضافھ أو التعدیل أو الحذف من الجدول یحدث حدث Triggerیتم إنشاء -١ داخل الجدول على الصفوف Loopمعین ولیكن مثال حدث عمل
تم تكوینھم سابقا فیتم المناده علیم Function أو Procedure أن ننادي على Triggerمن الممكن داخل أل -٢ وذلك للتسھیل حتى ال یكون الكود طویل Triggerداخل أل
:Triggerواآلن سوف نتعرف على الصیغة العامة لتكوین أل
Trigger Create or replace triggerاسم أل
Timing event on table
واسم الجدول المراد تنفیذ الحدث والحدث المطلوب تنفیذ الحدث إما قبلھ أو بعدهTimingوقت تنفیذ الحدث علیھ
Pl/sql Trigger bodyكود
وبھذا نكون قد تعرفنا على ماھو الحدث وكیفیھ عملھ ومم یتكون
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٩٤ -
Triggerواآلن سنتعرف على أليه عمل أل
: عليها Triggerيوجد أنواع يتم تنفيذ أل
:Statement على أل Trigger يتم تنفيذ أل -١
حيث أن االمثله السابقة ال تعتمد على Trigger هي انه اليوجد صفوف تتأثر بال Statementومعنى أل مره واحده trigger body حيث انه يتم تنفيذ الكود المكتوب في Statementالصفوف ولكن تعتمد على أل
فقط وال يتم تكراره
:Row على الصفTriggerيتم تنفيذ أل -٢
على Trigger body ويتم تكرار الكود المكتوب داخل أل Triggerومعنى هذا انه توجد صفوف تتأثر بال كل صف من الصفوف
ولكن Statement على مستوى أل Trigger على مستوى الصف تختلف عن كتابه ألTriggerوكتابه أل االختالف يكون بسيط
وسنرى هذا االختالف في االمثله التي سيتم ذكرها الحقا
ولكن البد أن نعرف كيف يتم تسلسل تنفيذ األحداث داخل الكود؟
:يتم التسلسل كاآلتي
-trigger Before statement 1قبل الجملة التي ينفذ عليها أل
Trigger 2-Before row triggerقبل الصف الذي ينفذ عليه أل
trigger 3-after row triggerبعد الصف الذي يتم تنفيذ أل
trigger 4-After statementبعد الجملة التي ينفذ عليها أل
بها Triggerوهذه هي االليه التي يتم تنفيذ أل
Statement التي تنفذ على مستوى أل Triggerوسنقوم اآلن بإعطاء أمثله ل
Statement على مستوى أل Triggerنفيذ أل ت:أوال
:نضيف أوال صف إلى الجدول كما سنرى في هذا المثال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٩٥ -
:مثال
في الجدول وبالتالي تمت أضافه الصف في الجدول وعلى هذه االضافه سيتم توضيح Insertعند عمل أوال على هذا الصفTriggerإليه عمل أل
معين تم تكوينه سابقاTrigger التي تتأثر ب على مستوى الجملةTriggerيبين هذا المثال كيفيه تنفيذ أل
كما هو موضح Trigger أوال على أل جمله ثم ثانيا على الصف الذي يتأثر بال Triggerفيتم تنفيذ أل بالشكل
Triggerوسنتعرف فيما يلي على كيفيه تكوين
:مثال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٩٦ -
يتم تنفيذه هذا الحدث قبل عمل أي تعديل Trigger هذا ألAgc2 يسمى Triggerفي هذا المثال تم تكوين فعند حدوث أي تعديل في Triggerفي الجدول وهذا يسمى بوقت الحدث والحدث الذي يحدث عنده تنفيذ أل
على الجدول Insert بتنفيذ جمله أل الجدول يقوم أوال
: نتبع اآلتيTriggerوللتأكد من عمل أل
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٩٧ -
٦=لذين أسماؤهم احمد ومعناها التعديل في الجدول بجعل أرقام الطالب الUpdateنكتب جمله
المكتوب انه يكون قد تمت االضافه أوال في الجدول قبل عمل التعديل في Triggerالمفروض انه حسب أل :الجدول ولنتأكد من ذلك
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٩٨ -
الفعل تمت االضافه في الجدول أوال قبل عمل التعديل كما هو باين في هذا المثال وبعد ذلك حدث التعديلب
أن يحدث تداخل بين مجموعه من األحداث مثل االضافه والتعديل والحذفTriggerمن الممكن داخل أل
:مثال يبين التداخل بين األحداث
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ٩٩ -
هذا الحدث يتم تنفيذه قبل عمل أضافه أو تعديل أو حذف AGCجديد يسمى Triggerفي هذا المثال تم تكوين بين هذين التاريخين فلو حدث أضافه يظهر هذا الخطأ وإذا Sysdateفي الجدول ثم إذا كان تاريخ اليوم وهو
حدث تعديل يحدث هذا الخطأ وإذا حدث حذف يحدث هذا الخطأ وإال يحدث خطأ آخر وهذا يبين التداخل بين جمل أل
DML
Statement على مستوى أل Triggerوبهذا نكون قد انتهينا من تطبيق أل
:Rowمستوى الصف ولكن على Triggerتكوين : ثانيا
:الصيغة العامة لها هي
Trigger Create or replace triggerاسم أل
Triggerأمر تكوين
Timing
وقت حدوث الحدث
Event on table
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٠٠ -
(reference old as old/new as new) إلعطاء Reference ويتم استخدام األحداث التي تتم على سواء االضافه أو الحذف أو التعديل في الجدول
أسماء للقيم القديمة والقيم الجديدة المراد استخدامهاFor each row
لكل صف من صفوف الجدول
When(condition)
إال إذا تم هذا الشرطTriggerأي ال يتم تنفيذ أل
:القديمة والجديدة بالنسبة للتعامل مع القيم
و التعديل فانه قد تحتاج إلى التعامل مع القيم القديمة قبل إلغائها في حاله إنشاء أحداث خاصة بعمليه الحذف أ New أو Oldأو قبل التعديل فيها وذلك يتم باستخدام الكلمتان
التي تنفذ على مستوى الصف هي التي يمكن أن يأتي معها أل قيم القديمة Triggerنالحظ انه بالنسبة لل Oldوالقيم الجديدة New
Statement على مستوى الجملTrigger عندما يتم تنفيذ أل new أو الكلمة oldدام الكلمة وال يصح استخ
:مثال
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٠١ -
معناها أن أل For each rowث أن الجملة على الصف حيTriggerهذا المثال هو مثال لتطبيق أل Trigger يتم تنفيذه على كل صف من الصفوف في الجدول ثم تم استخدام جمله شرطيه وهي When
إال إذا تم تنفيذ هذا الشرط أوال وهو أن Triggerوالهدف من استخدام هذه الجملة انه ال يتم تشغيل هذا أل يكون رقم الطالب القديم
هذا الكود معناه انه لو رقم Begin ثم تمت كتابه كود داخل أل Triggerسمى القيود على أل وهذه ت١= ألنه تم تعريف المتغير في الخارج فيعتبر المتغير انه : ونالحظ انه تم استخدام العالمة ٣=الطالب القديم
Host variable فادا تحقق هذا الشرط
٣١٠= لم يتحقق هذا الشرط يكون ثمن الدورة وإال إذا٣٢٠=يجعل ثمن الدورة الجديد
لتنفيذ When وأيضا تم استخدام الشرط New, Oldونالحظ في هذا المثال انه تم استخدام كال من الكلمتين هذا الحدث
:مثال آخر يبين كيفيه التعامل مع القيم القديمة والجديدة
في الجدول ويتم Insert قبل عمل Trigger يتم تنفيذ هذا أل agc3 اسمه Trigger في هذا المثال تم تكوين إذا تحقق هذا Trigger ولكن يتم تنفيذ هذا أل على كل صف موجود في الجدولTriggerتنفيذ هذا أل
ثم تم كتابه الكود ومعناه إذا حدث أضافه في الجدول يكون رقم الدورة ١=الشرط وهو أن يكون رقم الطالب ٣١٠= وإال يكون ثمن الدورة الجديد ٣٢٠=الجديد
بالنسبة للصف وبالنسبة للجمل كلها Triggerوبهذا نكون قد تعرفنا على كيفيه تكوين
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٠٢ -
Triggerقيم الجديدة داخل أل وكيفيه استخدام القيم القديمة وال
على مستوى الجداول فقط ولكنTriggersفي كل االمثله السابقة تم التعامل مع الجداول وتكوين
؟Table بالنسبة لTriggerعن تكوين مختلفةView على مستوى أل Triggerهل أل
عديل في جدول معين فان الجدول يأخذ بياناته من جدولين مختلفين فعند عمل تview ا فرضنا أن هذا أل فيه وهذا يؤدي إلى حدوث خطا لذلك يتم في حاله أل Insertيقوم بالتعديل في جدول وفي األخر يقوم بعمل
View استخدام Instead of التي تمكن أل view من عمل Insert دون حدوث مشاكل
تخدم بالنسبة للجداول السابق المسTrigger يكون مختلف عن ألTriggerوبالتالي فان أل
Instead ofواآلن سيتم توضيح مثال يبين كيفيه استخدام
:Viewنقوم بإنشاء :أوال
البيانات الموجودة في الجدولين الطالب وجدول الدورات وتم وضع بداخله Ihab باسم Viewتم إنشاء الدراسية
Viewإظهار بيانات أل :ثانيا
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٠٣ -
View إلظهار البيانات في أل
Viewداخل أل Insertعند عمل :ثالثا
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٠٤ -
يأخذ البيانات من جدولين مختلفينView تم حدوث خطا الن أل Viewعند االضافه داخل أل
instead ofوللتغلب على هذه المشكلة نستخدم
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٠٥ -
وذلك View وهي معناها بدال من عمليه الحذف على الInstead ofتم التغلب على هذه المشكلة باستخدام لكل صف من الصفوف ثم بعد ذلك يحدث أضافه في الجدول
Viewبهذا نكون تغلبنا على المشكلة الخاصة بال و
أو تشغيلهTriggerإليقاف تشغيل أل
ثم اسم ال Alter triggerيستخدم هذا األمر لتشغيل أو عدم تشغيل الحدث حيث انه يتم كتابه األمر Trigger
ومعناها غير شغالDisable أو ومعناها شغالEnableويكتب بعدها
لجدول لتشغيل أو إيقاف األحداث الموجودة في ا
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٠٦ -
:كما في المثال اآلتي
ومعناها غير شغالDisable أو نكتب ومعناها شغالEnable ثم اسم الجدول ونكتب Alterنكتب األمر
وبهذا نكون قد Compile ثم نكتب Trigger ثم اسم أل Alterث نقوم بكتابه األمر إذا أردنا ترجمه الحد أعدنا ترجمه الحدث
Triggerثم اسم أل Dropولحذف الحدث نستخدم األمر
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٠٧ -
بحمد اهللا تم
وتریشرح ھذا الكتاب علي صفحات موقع المجموعة العربیة للكمبتم
إبراھیم محمد ابوطالب معجالغالف و تتصمیم
الدكتور عمرو موسياألستاذ من كتابیةإال بموافقة منعًا باتًا نسخ ھذا الكتاب یمنع
عبر االنترنتاألكاديميةموقع زوروا
www.agcacademy.com
الحقوق محفوظة للمجموعة العربية للكمبيوترجميع
المجموعة العربية للكمبيوترإعداد PL/SQL كتاب
- ١٠٨ -