miash80 بتاريخ: 19 ديسمبر 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 ديسمبر 2010 نتمني تجميع جميع الدروس في ملف واحدحتي يتثني المراجعة بعد ذلكوشكرا لمجهودك الجبار الله يسلمك اخي محمدان شاء الله بعد الانتهاء من اخر درس سأقوم بتجميع هذه الدروس واضعها في ملف واحدمشكور على مرورك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 19 ديسمبر 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 ديسمبر 2010 جزاك الله كل خير الله يبارك فيك اخي الفاضلمشكور على عطر مرورك الطيب اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 19 ديسمبر 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 ديسمبر 2010 وهكذا ومن خلال هذه الجمل استطيع التعديل على الــProcedureمن خلال الحقل Text بحيث اخذ نسخة من الــProcedure وأقوم بالتعديل عليهوهذا الحقل موجود في معظم الجداول السابقةاستاذى العزيز اولاً : شكرا على مجهودك وشرحك وجزاك الله خيراًثانيا: يرجى توضيح كيفية التعديل على الــ PROCEDURE موجود فعلاً بمثال لو أمكن ذلكثالثاً : يرجى توضيح وشرح الفرق بين أنواع الـ IN/OUT/INOUT)PROCEDURE) بصورة أبسط ومتى يتم أستخدام أى منهم . اهلا وسهلا بالاخ الفاضلولا شكر على واجب اخي العزيزاخي العزيز بالنسبة للأستفسار الاول التعديل على الــــProcedure الموضوع بسيط نأتي القديم ونقوم بالتعديلات التي نريد بشرط بشرطان تكون في صيغة الكتابة الاساسية للــــ procedure كلمة or replace يعني بكل بساطة create or replace procedure procedure name وهذا المثال يبين كيف يتم التعديلاول سأكتب انشاء الـــprocedure بدون وجود كلمة or replace اريد ان اكتب بـــ procedure اعطيه رقم الموظف ويعطيني اسمه كالتاليSQL> create procedure pinfo(p_empno in number) 2 is 3 v_ename varchar2(20); 4 begin 5 select ename 6 into v_ename 7 from emp 8 where empno=p_empno; 9 dbms_output.put_line('Name '||v_ename); 10 end pinfo; 11 / Procedure created. ساقوم بتنفيذ الـــ procedure SQL> begin 2 pinfo(&p_empno); 3 end; 4 / Enter value for p_empno: 7788 Name SCOTT PL/SQL procedure successfully completed. كلام جميل الــــ procedure شغال 100 %طيب في حالة طلب مني ان كتابة procedure اعطيه رقم الموظف ويعطيني اسمه وراتبههل اكتب Procedure من الصفر وانا اصلا عندي Procedure يعمل تقريبا نفس هذا العمليجب ان استغل هذا الــ Procedure وأقوم بالتعديل عليه للقام بالوظيفة المطلوبةلذلك سأقوم بأسترجاع هذا الــProcedure من قاعدة البيانات والتعديل عليه SQL> ed Wrote file afiedt.buf 1 create procedure pinfo(p_empno in number) 2 is 3 v_ename varchar2(20); 4 v_sal number; 5 begin 6 select ename,sal 7 into v_ename,v_sal 8 from emp 9 where empno=p_empno; 10 dbms_output.put_line('Name '||v_ename||' Salary '||v_sal ); 11* end pinfo; 12 / create procedure pinfo(p_empno in number) * ERROR at line 1: ORA-00955: name is already used by an existing object كما ترى اخي العزيز اخبارنا النظام هذه الــ Procedure موجود ولا نستطيع التعديل عليه سأكتب نفس الــ Procedure بأستخدام or replace ونرى الفرقاول سأقوم بحذف هذه الـــProcedure SQL> drop procedure pinfo; Procedure dropped. سأقوم بكتابته بالصيغة الجديدة بأستخدام or replace SQL> create or replace procedure pinfo(p_empno in number) 2 is 3 v_ename varchar2(20); 4 begin 5 select ename 6 into v_ename 7 from emp 8 where empno=p_empno; 9 dbms_output.put_line('Name '||v_ename); 10 end pinfo; 11 / Procedure created. ساقوم بتنفيذ الـــ procedure SQL> begin 2 pinfo(&p_empno); 3 end; 4 / Enter value for p_empno: 7788 Name SCOTT PL/SQL procedure successfully completed. كلام جميل الــــ procedure شغال 100 %طيب في حالة طلب مني ان كتابة procedure اعطيه رقم الموظف ويعطيني اسمه وراتبههل اكتب Procedure من الصفر وانا اصلا عندي Procedure يعمل تقريبا نفس هذا العمليجب ان استغل هذا الــ Procedure وأقوم بالتعديل عليه للقام بالوظيفة المطلوبةلذلك سأقوم بأسترجاع هذا الــProcedure من قاعدة البيانات والتعديل عليه SQL> ed Wrote file afiedt.buf 1 create or replace procedure pinfo(p_empno in number) 2 is 3 v_ename varchar2(20); 4 v_sal number; 5 begin 6 select ename,sal 7 into v_ename,v_sal 8 from emp 9 where empno=p_empno; 10 dbms_output.put_line('Name '||v_ename||' Salary '||v_sal); 11* end pinfo; 12 / Procedure created. تم التعديل لنرى النتيجة صحيحة ولا لألنستدعي الـــProcedure SQL> begin 2 pinfo(&p_empno); 3 end; 4 / Enter value for p_empno: 7788 Name SCOTT Salary 3000 PL/SQL procedure successfully completed. النتيجة صحيحة 100 %اتمنى ان اكون اوصلت الفكرة اخي العزيز اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 19 ديسمبر 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 ديسمبر 2010 ثالثاً : يرجى توضيح وشرح الفرق بين أنواع الـ IN/OUT/INOUT)PROCEDURE) بصورة أبسط ومتى يتم أستخدام أى منهم .[/ ][/color] أسف اخي العزيز لم اكمل توضيح استفسارتكاخي العزيز موضوع البراميتر موضوع مهم جدااااااكما قلنا سابقا البراميتر نمررها عبر الاجراء وهي عبارة عن ثلاث انواع كما يليPrameter Type: Name Mode data Type P1 In Number,Varchar2,Date ....Ext P2 Out Number,Varchar2,Date ....Ext P3 In Out Number,Varchar2,Date ....Ext البراميتر من In يقوم هذا البراميتر بأدخال قيمة للـــ Procedureالبرامتير من Out يقوم هذا البراميتربالاحتفاظ بقيمة معينة من ال Procedure وأخراجهاالبراميتر من In Out يقوم هذا البراميتر بأدخال قيمة معينة على الــ Procedure ويقوم الــ Procedure بتنفيذ الاوامر الموجودةداخله وأخراج قيمة جديدة للبراميتر الذي قمنا بأدخالهبعض الملاحظات على البراميترطبعا من المهم جداااا عدم تحديد حجم انواع البيانات في البراميتر يحدد فقط نوع البياناتاذا ما حددنا نوع Mode ياخذ نوع الــ MOde مباشرة Inلا نستطيع عمل لي تعديل على البراميتر من نوع In داخل الـــ Procedureونستطيع التعديل على البراميتر من نوع الـــ out ومن نوع In Outعند أخراج قيمة مباشرة من الـــ Procedure على الشاشة ليس بحاجة للبراميترمن نوع Out فأمر الطباعة يكفي في هذه الحالةسأقوم بكتابة بعض الامثلة للتوضيحاولاً براميتر من نوع In اريد ان اكتب Procedure اعطيه رقم القسم ويعطيني اسمهلنحلل هذه المسئلة اريد كتابة procedure اعطيه رقم القسم شو معنى كلمة اعطيه يعني ادخل رقم القسم ويعطيني اسمه يعني يخرج اسم القسم على الشاشة .بسم الله نبدء SQL> create or replace procedure p_in(p_deptno in number) 2 is 3 v_dname varchar2(20); 4 begin 5 select dname 6 into v_dname 7 from dept 8 where deptno=p_deptno; 9 dbms_output.put_line('Name dpet '||v_dname); 10 end; 11 / Procedure created. الان طريقة الاستدعاء SQL> begin 2 p_in(&p_deptno); 3 end; 4 / Enter value for p_deptno: 10 Name dpet ACCOUNTING PL/SQL procedure successfully completed. قمنا بتمرير رقم القسم او قمنال بأدخاله يعني استخدمنا البراميتر من نوع الادخال In مثال اخر على البراميتر من نوع Inريد ان اكتب Procedure يقوم بوظيفة Printبدل من كتابة dbms_output.put_line();في كل مرة اريد ان استخدم فيها الطباعةبسم الله نبدء SQL> create or replace procedure print(p_text in varchar2) 2 is 3 begin 4 dbms_output.put_line(p_text); 5* end; SQL> / Procedure created. طريقة الاستدعاءطبعا هنالك نوعين من الاستدعاء طريقة Pl/Sql SQL> begin 2 print('Hi How Are You ...'); 3 end; 4 / Hi How Are You ... طريقة Sql SQL> execute print('Hi How Are You ...'); Hi How Are You ... PL/SQL procedure successfully completed. طبعا نستخدم طريقة الــSql فقط في حالة اذا كان البراميتر من نوع Inمثال جديد أريد ان أستخدم فيه براميتر من نوع Outاريد ان اكتب Procedure اعطيه رقم الموظف يعطيني قيمة راتبه السنوي ويضع هذه القيمة في متغير لاستخدامه في المستقبل.لنحلل هذه المسئلة اريد كتابة procedure اعطيه رقم الموظف شو معنى كلمة اعطيه يعني ادخل رقم الموظف ويعطيني قيمة راتبه السنوي وأضع هذه القيمة في متغير لاستخدام يعني استخدم براميتر يحفظ هذه القيمة داخله واخراجها عند الحاجة يعني براميتر من نوع Outبسم الله نبدء SQL> create or replace procedure p_out(p_empno in number,p_sal out number) 2 is 3 begin 4 select sal*12 5 into p_sal 6 from emp 7 where empno=p_empno; 8 print('Salary '||p_sal); 9 end; 10 / Procedure created. طريقة أستدعاء Procedure فيه براميتر من نوع Out .يجب يجب يجب ان نعرف لكل براميتر من نوع Out متغير نضع فيه قيمة البراميتر SQL> declare 2 v_sal number; 3 begin 4 p_out(&p_empno,v_sal); 5 end; 6 / Enter value for p_empno: 7788 Salary 36000 PL/SQL procedure successfully completed. كما رأينا استخدمنا براميتر من نوع In للرقم الموظف وأستخدمنا براميتر من نوع Out للتخزين قيمة الراتب السنوي واستخدام هذه القيمة عند الحاجة .مثال جديد اريد ان أستخدم فيه براميتر من نوع In Outاريد ان اكتب Procedure اعطيه اسم موظف ويعمل معالجة للأسماء ويخرج لي الاسم بعد المعالجة مثلا اريد ان يغير حرف T بحرف Z بسم الله نبدء SQL> create or replace procedure p_in_out (p_name in out varchar2) 2 is 3 begin 4 select replace(ename,'T','Z') 5 into p_name 6 from emp 7 where ename=p_name; 8 print(p_name); 9 end p_in_out; 10 / Procedure created. قمنا بتعريف براميتر من نوع In Out ندخا عليه الاسم ونعمل عليه معالجة وبعد ذلك نضع الاسم بعد المعالجة في نفس البراميترطريقة الاستدعاء SQL> declare 2 v_name varchar2(50); 3 begin 4 v_name:=&v_name; 5 p_in_out(v_name); 6 end; 7 / Enter value for v_name: 'SCOTT' SCOZZ PL/SQL procedure successfully completed. وفي درس الــProcedure والـــFunction يوجد امثلة اخرى يكمن الاستفادة منها .ارجوا ان اكون اوصلت الفكرة . 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 19 ديسمبر 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 ديسمبر 2010 العضو العزيز السلام عليكم ورحمة الله وبركاته جميل ما قد شرحت وجزاك الله كل خير وغفر لك ولكن احب ان اقترح اقتراحا وهو حبذا لو كان الشرح من خلال ملف كامل مثل doc او pdf والغاية من اقتراحي هو التوثيق لدينا كمرجع مكتوب فيما لون اردنا مراجعته ثانية وجزاك الله كل خير وعليكم السلام ورحمة الله وبركاتهالله يبارك فيك اخي الفاضلان شاء الله مع نهاية الدروس سأقوم بتنفيذ اقتراحك اخي العزيزمشكور على مرورك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 19 ديسمبر 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 ديسمبر 2010 شكرا لك اخي العزيزوجزاك الله كل خير على ما بذلته من جهد لمساعدة اخوانك في المنتدىوحياك الله في بلدك الثاني السعوديه الله يبارك فيك اخي العزيزفعلا بلدي الثاني السعوديةبلد طيب وشعب طيبمشكور اخي علىت مرورك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 19 ديسمبر 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 ديسمبر 2010 اللهم اغفر لك ما تقدم من ذنبك و ما تأخر..اللهم احسن خاتمتك اللهم اغفر لوالديك و ارحمهما و ادخلهما جناتك برحمتك يا أرحم الراحمين جزاك الله عنا كل خير بالتوفيق ، الله يبارك فيك اخي العزيز على الدعاء ولك بالمثل ان شاء اللهمشكور على مرورك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mazahier بتاريخ: 20 ديسمبر 2010 تقديم بلاغ مشاركة بتاريخ: 20 ديسمبر 2010 شكراّ علي الشرح الواضح والمميذ استفدت كتيرنتمني ان تواصل في الشرح اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 20 ديسمبر 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 20 ديسمبر 2010 شكراّ علي الشرح الواضح والمميذ استفدت كتيرنتمني ان تواصل في الشرح العفو اخي العزيزان الان اكتب في اخر درس في الـــPL/SQL مشكور على مرورك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mohadk بتاريخ: 31 ديسمبر 2010 تقديم بلاغ مشاركة بتاريخ: 31 ديسمبر 2010 بارك الله فيك يا اخي ونحن في انتظار المذيد من الدروس اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 5 يناير 2011 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 5 يناير 2011 بارك الله فيك يا اخي ونحن في انتظار المذيد من الدروس الله يبارك فيك اخي العزيز مشكور على مرورك الطيب اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 5 يناير 2011 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 5 يناير 2011 (معدل) السلام عليكم ورحمة الله وبركاتهانا اكرر اعتذاري اخواني واخواتي الاعزاء على التأخر في كتابة الدروساليوم بأذن الله اكون قد كتبة اخر درس في مادة الــــ PL/SQLبسم الله نبدء اليوم سنتحدث عن الشعب ((( شعب قاعدة البيانات اوراكل))) وعلاقة افراد هذا الشعب مع بعضاتعرفون من هو هذا الشعب ...؟؟؟انــــــــــــــه الجداولسنناقش موضوع الشعب وعلاقة افراد هذا الشعب مع بعضهم الشعب هو عبارة عن عائلات ((( الجداول Table))) وهذه العائلات عبارة عن افراد ((( سجلات Record )))ويوجد علاقات بين افراد هذا الشعب وهنالك أمور يجب القيام بها عند حدوث مناسبة ما بين افراد هذا الشعب .على سبيل المثال حصل حالة وفاة بين افراد هذا الشعب يجب ((( القيام بالتعزية )))حصل حالة ولادة بين افراد هذا الشعب يجب ((( القيام بالمباركة )))حصل نجاح احد افراد هذا الشعب بالثانوية العامة او الكلية او الجامعةاو حصل احد افراد هذا الشعب على ترقية الى منصب اعلىاو حصل احد افراد هذا الشعب ترفيع في عمله يجب ((( القيام بالتهنئة )))في حالة قيام احد افراد هذا الشعب بعمل يتنافى مع قوانين هذا الشعب يجب ان يقوم احد بأيقاف هذا الفرد واجباره عن الرجوع عن عمله وارجاع كل شيئ كما كان سابقاكلام جميل جدااااالحالات السابقة تمثل احداث بالنسبة للمجتمع وهي كالتالي .حالة الموت تمثل Deleteحالة الولادة تمثل Insertحالة النجاح او الترقية او الترفيع تمثل Updateشرح بسيط ... Delete : حيث تختص هذه الجمله بالحذف. Insert : حيث تختص هذه الجمله بالإضافة. Update : حيث تختص هذه الجمله بالتعديل. عندي سؤال صغير جداااااااا من الشخص الذي يقوم بهذه الوظائف ...؟من يقوم بالتعزية في حالة الموت ...؟من يقوم بالمباركة في حالة الولادة ...؟من يقوم بالتهنئة في حالة النجاح او الترقية او الترفيع ...؟من يقوم بأيقاف أي فرد قام بعمل خطأ او اي عمل غير مرغوب فيه ...؟من هو الذي يعمل في حالة حدوث عمل معين ...؟من هو الذي يعمل عند حدوث أي امر طارئ ...؟انه مركز الطوارئ لهذا الشعب ...!!!تعرفون جميعا ما هو مركز الطوارئ وما هي وظائفه مركز الطوارئ يحتوي على عدة أقسام ومن هذه الاقسام الدفاع المدني ((( الاطفائية )))قسم شكاوي المياهقسم شكاوي الكهرباءقسم شكاوي الاتصالاتالاسعافالامن العامأذا انه بمجرد حصول حدث ما كالحريق يعمل قسم الاطفائية مباشرة ويتحرك بأتجاه الحريق وفي حالة حصول حادث يتحرك قسم الاسعاف مباشرة بأتجاه الحادث وفي حالة أنقطاع الكهرباء أو الماء او الاتصالات يعمل القسم الخاص بكل واحد منهم ويتحرك بأتجاه الهدف .كلام جميل جدا جدا جدالكن عندي سؤال صغير جدا ...؟متى يعمل مركز الطوارئ ...؟؟؟يعمل مركز الطوارئ في حالتين أما قبل وقوع الحدث او بعد وقوع الحدث معلش مش فاهم حاجة ممكن توضيح ...!!!بسيطة يا سيدي العزيز ...الموضوع بسيط جداااايعمل مركز الطوارئ قبل الحدث أي قبل وقوع الحدثعلى سبيل المثال :في حالة وجود مباراة بين فرقين كبيرين كفريق برشلونة وريل مدريد او فريقي الاهلي والزمالك في مصر الشقيقةيقوم قسم الامن العام بنشر قواته قبل المباراة داخل الملعب وخارجه وبين مرافقه خوفا من وقوع المشاجرات بين مشجعي كلا من الفرقينمثال اخر :في حالة وجود أنتخابات لاحد الدول يقوم الامن العام قبل الانتخاب بنشر قواته عند مراكز الانتخاب خوفا من تصادم مرشحي كل دائرة .طبعا في كلا الحالتين السابقتين يقوم كلا من قسم الاسعاف وقسم الدفاع المدني بنشر افرادهم وسيارتهم خوفا من وقوع الحوادث .مثال اخر :في حالة لا سمح الله انتشار وباء او فايروس في احد المناطق في بلد ما يقوم قسم الاسعاف في المناطق الاخرى بأخذ الاحتياطات اللازمة من اعطاء المضادات الحيوية للناس ونشر منشورات تحذر من هذا الفايروس قبل دخول هذا الفايروس للمناطق السليمة .وهنالك الكثير الكثير من الوظائف التي يقوم بها مركز الطوارئ قبل وقوع الحدث .أما بالنسبة للعمل مركز الطوارئ بعد الحدث أي بعد وقوع الحدثعلى سبيل المثال :في حالة تلقي قسم الاتصالات شكاوي بخصوص انقطاع الاتصالات في منطقة مايقوم المركز بأرسال لجنة متخصصة في هذه الاعطال وعمل اللازم.مثال أخر :في حالة تلقي قسم الدفاع المدني بلاغ عن حدوث حريق في منزل او مصنع او شركة ...الخيقوم المركز بأرسال الاطفائية للقيام بأطفاء النيران .ويوجد الكثير الكثير من الوظائف التي يقوم بها مركز الطوارئ بعد وقوع الحدث .كلام جميل ماذا سمت اوراكل هذا المركز ...؟اتعرفون ماذا سمت اوراكل مركز الطوارئ لهذا الشعب ...؟انـــــــــــــــــــه الـــــــــــــــــ Trigger !!!اظنكم عرفتم ما هو الــــــTrigger وما وظيفته .لكن يوجد تعريفات اخرى للــــTrigger لنذكر بعضها .التريجر هو اسلوب معالجة الاحداث في الداتابيزأوالتريجر اذا هو عبارة عن اجراء يتم كتابته بحيث يتم استدعاءه تلقائيا اذا طابق الحدث الذي كتب من اجلهأوالتريجر اذا هو عبارة عن اجراء يتم كتابته بحيث يتم استدعاءه تلقائيا اذا طابق الحدث الذي كتب من اجلهأوالتريجر هو مكان نكتب به كود معين و نخزنه بالذاكرة لكن هذا الكود ينطلق نتيجة حدث معينأوالتريجر عبارة عن مجموعة من الاوامر يتم تنفيذها عندما تتم عملية الاضافة او الحذف او التعديلأيضا يعرف التريجر بالزناد وهو عباره عن مكون يتم بناءه وتحديد الحدث الذي سيقوم بحث مجموعة من العبارات علي إنجاز شئ معين .ايضا يعرف التريجر بزناد المسدس هو عبارة عن مجموعه من المعلومات التي يتم تنفيذها بشكل أوتوماتيكي بواسطة النظام في حال حدوث تعديل او أضافه او حذف .أيضا يعرف التريجر بــ القادح أو الأجراء القادح كما تسمى بمعنى أدق هي عبارة عن أجراءات أي مجموعة من الأوامر أو الحزم البرمجية يتم تنفيذها كلما صدر الأمر المعرف له .بعد انا تعرفنا على الـــTrigger وخصائصه وصفاته .سنقوم بشرح كيفية كتابة الـــ Trigger بالتفصيل الممل .بسم الله نبدء CREATE OR REPLACE TRIGGER < TRIGGER_NAME> <BEFORE | AFTER> <ACTION> [OR <ACTION> OR <ACTION>] ON <table_name> For each row BEGIN <trigger_code> END < TRIGGER_NAME >; / سأشرح الـــTrigger جزء جزء CREATE OR REPLACE TRIGGER هذا الجزء خاص بأنشاء الــtigger وخاصية التعديل عليه< TRIGGER_NAME> هنا نكتب أسم التريجر والافضل ان يدل اسم التريجر على وظيفته <BEFORE | AFTER> هنا نحدد وقت انطلاق التريجر قبل او بعد الحدث <ACTION> هنا نحدد متى يعمل التريجر وهي ثلاث حالات Delete و Insert و Update ممكن ان نحدد حالة او حالتين او تحديد كل الحالات .ON <table_name> تحديد اسم الجدول الذي سينطلق عليه التريجر For each rowهذا الجزء اختياري ويعد هذا الخيار ما اذا كان التريجر سوف ينطلق مرة واحدة لكل صف تاثر بالتريجر ((( سأشرح لاحقا بالتفصيل ))) BEGIN بداية التريجر<trigger_code> الكود الذي سوف ينفذ في حالة انطلاق التريجرEND < TRIGGER_NAME >; نهاية التريجر قبل البدء في كتابة الامثلة هنالك موضوع يجب شرحه وهو QualifiersQualifiers are activated when we have trigger on the tableاو بمعنى اخر التعامل او التمميز بين القيم القديمة والقيم الجديدة في Date Base Trigger في حالة Delete أو Insert أو Update .او بمعنى أخر الوصول الى القيم القديمة والحديثة للصف الحالي حيث في عمليتي insert و update يمكنك الوصول من القيم القديمة والحديثة اما بالنسبة لعملية delete فمن الطبيعي ان المتاح هو القيم القديمة فقطويمكنك استخدام القيم القديمة والحديثة في التريجرات before و after وسوف تكون القيم القديمة والحديثة هي الموجودة فقط في before trigger اما اذا كان after trigger فانه يقوم بالتقاط القيمة بعد التحديث.الان وقت الامثلة .بسم الله نبدء .اريد ان اكتب تريجر يعطيني القيم القديمة والجديدة للرواتب في حالة عملت تعديل للرواتب في جدول الموظفين . SQL> Create Or Replace Trigger update_sal 2 before update 3 on emp 4 for each row 5 begin 6 dbms_output.put_line('You Update '||:old.ename||' Old Salary '||:old.sal||' New Salary '||:n ew.sal); 7 8 end update_sal; 9 / Trigger created. سأقوم بزيادة رواتب الموظفين بقيمة 50 دينار . SQL> update emp 2 set sal=sal+50; والنتيجة كما يلي ... You Update SMITH Old Salary 1000 New Salary 1050 You Update ALLEN Old Salary 1700 New Salary 1750 You Update WARD Old Salary 1300 New Salary 1350 You Update JONES Old Salary 3000 New Salary 3050 You Update MARTIN Old Salary 1300 New Salary 1350 You Update BLAKE Old Salary 2500 New Salary 2550 You Update CLARK Old Salary 2000 New Salary 2050 You Update SCOTT Old Salary 3000 New Salary 3050 You Update KING Old Salary 5000 New Salary 5050 You Update TURNER Old Salary 1600 New Salary 1650 You Update ADAMS Old Salary 1200 New Salary 1250 You Update FORD Old Salary 3000 New Salary 3050 You Update MILLER Old Salary 1500 New Salary 1550 13 rows updated. مثال اخر اريد ان يطبع تهنئة في حالة اضافة قسم جديد على جدول الاقسام . SQL> create or replace trigger add_dept 2 after insert 3 on dept 4 begin 5 dbms_output.put_line('Congratulations new section and we wish him a bright beginning'); 6 end add_dept; 7 / Trigger created. سأقوم بأضافة قسم جديدة وأسمه برمجةوالنتيجة كالتالي SQL> insert into dept (deptno,dname,loc) 2 values(55,'programmin','amman'); Congratulations new section and we wish him a bright beginning 1 row created. مثال اخراريد في حالة حذف موظف ما من جدولين الموظفين ان يطبع رسالة ان تم الحذف . SQL> create or replace trigger del_emp 2 after delete 3 on emp 4 begin 5 print('Officer has been deleted from the Employee table ...'); 6 end del_emp; 7 / Trigger created. سأقوم بحذف موظف من جدول الموظفين الذي رقمه 7844والنتيجة هي ... SQL> delete emp 2 where empno=7844; Officer has been deleted from the Employee table ... 1 row deleted. كلام جميل جدا في الامثلة الثلاث السابقة استخدمت كل الحالات الـــ Delete والـــInsert والـــ Updateانها امثلة بسيطة جدا فقط للتوضيحفي المرة القادمة اذ لم يكن هنالك اسئلة على هذا الموضوعسأقوم بكتابة مختصر شديد عن الــ Triggerوأقوم بكتابة امثلة للحياة العملية .السلام عليكم ورحمة الله وبركاته تم تعديل 5 يناير 2011 بواسطة miash80 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 5 يناير 2011 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 5 يناير 2011 انا بأنتظار الاسئلة اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
علوي2011 بتاريخ: 6 يناير 2011 تقديم بلاغ مشاركة بتاريخ: 6 يناير 2011 جزاك الله الف خير الله يغفرلك ولوالديك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 12 يناير 2011 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 12 يناير 2011 (معدل) جزاك الله الف خير الله يغفرلك ولوالديك الله يبارك فيك اخي العزيزمشكور على مرورك الطيب تم تعديل 12 يناير 2011 بواسطة miash80 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 12 يناير 2011 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 12 يناير 2011 ان شاء الله اذا لم يوجد أي أسئلة سأقوم بكتاية امثلة توضيحة اكثر عن الــTriggerمع كتابة تلخيص عن الـــTriggerيوم السبت القادم 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
متى نتخرج بتاريخ: 21 فبراير 2011 تقديم بلاغ مشاركة بتاريخ: 21 فبراير 2011 يعطيك العافيه جهد مميز اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hannona بتاريخ: 30 مايو 2011 تقديم بلاغ مشاركة بتاريخ: 30 مايو 2011 اخواني واخواتي مشرفين وأعضاء السلام عليكم ورحمة الله وبركاته وانا اسف للأنقطاع عن المنتدى مدة طويلة بسبب ظروف الحياة .وشكر خاص لكل من سئل عنيوالله يسعدكم جميعااليوم والحمدلله بدءت بكتابة بعض الدروس التي تشمل قسم PL/SQL من الألف الى الياء واليوم سأضع اول درس وإن شاء الله ان اكون قد وفقت في كتابة هذه الدروس ولن اضع الدرس التالي الا في حالة أستعياب الدرس الاول للجميع لذلك اطلب من اي عضو او مشترك طرح اي سؤال اول باول في اي درس سيتم طرحه مع رجاء خاص ان تكون الاسئلة طمن الدرس لكي لا يتشتت تفكير اي مشترك.وبسم الله بندء .....مقدمة صغيرة لغة PL/SQL تعتبر لغة البرمجة الخاصة بنظام اوراكل وهي اداة برمجية قوية جدا وكلمة PL/SQL اختصاراً لـ (Procedure Language/Structure Query Language ) وتستخدم هذه اللغة لتجهيز نظام Oracle عن طريقة معالجة التسجيلات وتستخدم أيضاً في أدوات التطوير المنتجة من قبل شركة Oracle وهي تعتبر أساس برنامج بناء النماذج Oracle Forms و Oracle Reports وتستخدم هذه اللغة أيضاً لتعريف نموذج ما ، والقيام ببعض الحسابات الخاصة في تقرير ما ، ومن أجل التسجيلات الدرس الاول في ال Pl/Sql هو كتابة البرنامج البسيط وشرح مكونات البرنامج بالتفصيل Declare (Optional) هذا الجزء اختياري بس اذا كان هنالك متغيرات يكون أجباري Variables Decleration Section هذا الجزء من البرنامج يعرف فيه المتغيرات بأنواعها begin (Mandatory) بداية البرنامج وهذا الجزء أجباري Eexcutable Section هنا يكتب كود البرمجة الخاص بالبرنامج Pl/Sql Code Exception (Optional)هذا الجزء خاص بمعالجة أخطاء البرنامج وهو أختياري ولكن انا بنظري هذا الجزء يجب ان يكون اجباري Error Hanling Section Error Type انواع الاخطاء 1) Syntax Error (Compilaion) 2)Run Time (Logical Error) end; (Mandatory) نهاية البرنامج وهذا الجزء أجباري قبل البدء في اعطاء امثلة يجب التذكير بانواع البيانات (Data Types) Varibale Data Type 1) V1 Number عدد صحيح 2) V2 Number(,) عدد حقيقي 3) V3 Varchar2( ) متغير نصي 4) V4 Boolean المتغير المنطقي ويأخذ خيارين a)True b)False 5) V5 Table-Name.Column-Name%Type; يأخذ نفس مواصفات حقل معين في احد الجداول Example : V5 Emp.Empno%type; Emp في جدول الـــEmpno أخذت نفس نوع الحقل V5 6) V6 Table-name%Rowtype; يأخذ نفس مواصفات جدول معين ونتعامل مع هذا المتغير كما نتعامل مع جدول Example : V6 Emp%rowtype; ويستخدم بهذه الطريقة V6.Empno Or V6.Ename Or V6.sal ....Ext 7) V7 Cursor وهذا المتغير له درس مستقل في الدروس القادمة أنشاء الله 8) V8 Cursor-Name%Rowtype; أنشاء الله Cursor وهذا تابع في درس ال كما احب ان اذكربــــ جمــــــل If Statment وأنواعها 1)If Condition then Code .....; end If; 2)If Condition then Code .....; elsif Code....; end If; 3)If Condition then Code .....; elsif Code....; elsif Code....; else Code...; end If; 4)If Condition1 then Code .....; If Condition2 then Code....; If Condition3 then Code....; End If; ---Condition3 End If; ---Condition2 End If; ---Condition1 هنا سنشرح الحلقات او حلقة التكرار وانواعها طبعا يجب وضع شرط للخروج من الحلقة 1) For Loop Example1 : اريد ان اطبع من رقم واحد الى رقم عشرة For i in 1..10 loop طبعا اجباري من الصغير للكبير دائما end loop; Example2 : اريد ان اطبع من رقم واحد الى رقم عشرة بالعكس For i in reverse 1..10 loop أنتبه اجباري من الصغير للكبير دائما end loop; 2) While Loop While Condition Loop يجب وضع شرط لايقاف الحلقة Code .....; end Loop; Example :اريد طباعة الراتب لغاية ما يصير الراتب يساوي 1000 دينار While sal = 1000 loop Code .....; sal:=sa+10; end loop; 3)loop Loop Code ....; Exit When Condition; end loop; Example : أريد ان يعمل اضافة على الراتب لغاية ما يصير الراتب اقل أو يساوي500 دينار Loop Code ....; Exit When sal <= 500; end loop; أتمنى ان اكون اوصلت معلومة بشكل صحيح ومناسب فإن أصبت فمن الله وإن أخطأت فمن الشيطان ،،إن شاء الله في المرة القادمة بعد الأخذ برأيكم وأسئلتكم سأبدء بكتابة الامثلة إن شاء اللهأدعو لي بالتوفيق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hannona بتاريخ: 30 مايو 2011 تقديم بلاغ مشاركة بتاريخ: 30 مايو 2011 شكرا كثيراً على الشرح الرائع ولكن هل من الممكن وجود شرح ل pl sql فيديو اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hannona بتاريخ: 30 مايو 2011 تقديم بلاغ مشاركة بتاريخ: 30 مايو 2011 اخواني واخواتي مشرفين وأعضاء السلام عليكم ورحمة الله وبركاته وانا اسف للأنقطاع عن المنتدى مدة طويلة بسبب ظروف الحياة .وشكر خاص لكل من سئل عنيوالله يسعدكم جميعااليوم والحمدلله بدءت بكتابة بعض الدروس التي تشمل قسم PL/SQL من الألف الى الياء واليوم سأضع اول درس وإن شاء الله ان اكون قد وفقت في كتابة هذه الدروس ولن اضع الدرس التالي الا في حالة أستعياب الدرس الاول للجميع لذلك اطلب من اي عضو او مشترك طرح اي سؤال اول باول في اي درس سيتم طرحه مع رجاء خاص ان تكون الاسئلة طمن الدرس لكي لا يتشتت تفكير اي مشترك.وبسم الله بندء .....مقدمة صغيرة لغة PL/SQL تعتبر لغة البرمجة الخاصة بنظام اوراكل وهي اداة برمجية قوية جدا وكلمة PL/SQL اختصاراً لـ (Procedure Language/Structure Query Language ) وتستخدم هذه اللغة لتجهيز نظام Oracle عن طريقة معالجة التسجيلات وتستخدم أيضاً في أدوات التطوير المنتجة من قبل شركة Oracle وهي تعتبر أساس برنامج بناء النماذج Oracle Forms و Oracle Reports وتستخدم هذه اللغة أيضاً لتعريف نموذج ما ، والقيام ببعض الحسابات الخاصة في تقرير ما ، ومن أجل التسجيلات الدرس الاول في ال Pl/Sql هو كتابة البرنامج البسيط وشرح مكونات البرنامج بالتفصيل Declare (Optional) هذا الجزء اختياري بس اذا كان هنالك متغيرات يكون أجباري Variables Decleration Section هذا الجزء من البرنامج يعرف فيه المتغيرات بأنواعها begin (Mandatory) بداية البرنامج وهذا الجزء أجباري Eexcutable Section هنا يكتب كود البرمجة الخاص بالبرنامج Pl/Sql Code Exception (Optional)هذا الجزء خاص بمعالجة أخطاء البرنامج وهو أختياري ولكن انا بنظري هذا الجزء يجب ان يكون اجباري Error Hanling Section Error Type انواع الاخطاء 1) Syntax Error (Compilaion) 2)Run Time (Logical Error) end; (Mandatory) نهاية البرنامج وهذا الجزء أجباري قبل البدء في اعطاء امثلة يجب التذكير بانواع البيانات (Data Types) Varibale Data Type 1) V1 Number عدد صحيح 2) V2 Number(,) عدد حقيقي 3) V3 Varchar2( ) متغير نصي 4) V4 Boolean المتغير المنطقي ويأخذ خيارين a)True b)False 5) V5 Table-Name.Column-Name%Type; يأخذ نفس مواصفات حقل معين في احد الجداول Example : V5 Emp.Empno%type; Emp في جدول الـــEmpno أخذت نفس نوع الحقل V5 6) V6 Table-name%Rowtype; يأخذ نفس مواصفات جدول معين ونتعامل مع هذا المتغير كما نتعامل مع جدول Example : V6 Emp%rowtype; ويستخدم بهذه الطريقة V6.Empno Or V6.Ename Or V6.sal ....Ext 7) V7 Cursor وهذا المتغير له درس مستقل في الدروس القادمة أنشاء الله 8) V8 Cursor-Name%Rowtype; أنشاء الله Cursor وهذا تابع في درس ال كما احب ان اذكربــــ جمــــــل If Statment وأنواعها 1)If Condition then Code .....; end If; 2)If Condition then Code .....; elsif Code....; end If; 3)If Condition then Code .....; elsif Code....; elsif Code....; else Code...; end If; 4)If Condition1 then Code .....; If Condition2 then Code....; If Condition3 then Code....; End If; ---Condition3 End If; ---Condition2 End If; ---Condition1 هنا سنشرح الحلقات او حلقة التكرار وانواعها طبعا يجب وضع شرط للخروج من الحلقة 1) For Loop Example1 : اريد ان اطبع من رقم واحد الى رقم عشرة For i in 1..10 loop طبعا اجباري من الصغير للكبير دائما end loop; Example2 : اريد ان اطبع من رقم واحد الى رقم عشرة بالعكس For i in reverse 1..10 loop أنتبه اجباري من الصغير للكبير دائما end loop; 2) While Loop While Condition Loop يجب وضع شرط لايقاف الحلقة Code .....; end Loop; Example :اريد طباعة الراتب لغاية ما يصير الراتب يساوي 1000 دينار While sal = 1000 loop Code .....; sal:=sa+10; end loop; 3)loop Loop Code ....; Exit When Condition; end loop; Example : أريد ان يعمل اضافة على الراتب لغاية ما يصير الراتب اقل أو يساوي500 دينار Loop Code ....; Exit When sal <= 500; end loop; أتمنى ان اكون اوصلت معلومة بشكل صحيح ومناسب فإن أصبت فمن الله وإن أخطأت فمن الشيطان ،،إن شاء الله في المرة القادمة بعد الأخذ برأيكم وأسئلتكم سأبدء بكتابة الامثلة إن شاء اللهأدعو لي بالتوفيق 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hannona بتاريخ: 30 مايو 2011 تقديم بلاغ مشاركة بتاريخ: 30 مايو 2011 اليوم سنبدء ببعض الامثلة البسيطة .ولكن قبل ذلك يجب معرفة بعض الامور بالنسبة للغة الــــــPL/SQL 1) يجب قبل كتابة اي برنامج في هذه اللغة كتابة هذه الجملة set serveroutput onلكي تظهر نتيجة اي برناج على الشاشة وبدون هذه الجملة لن تظهر اي نتيجة على الشاشة وبالامكان تجربة البرنامج مع او بدون هذه الجملة .طبعا تكتب هذه الجملة مرة واحدة في كل مرة نفتح فيها شاشة ال Oracle SQL*Plus2) يجب ان ينهتي أي امر في هذه اللغة بـــ ; و بعد كل تعريف موجود في البرنامج تنتهي بــــ ;3) لأدخال اي قيمة في البرنامج يوضع & بعد كتابة المتغير مع اشارة := على سبيل المثال عندي متغير واسمه x واريد ان ادخل قيمة x اكتب التالي x:=&x طبعا بعد & ممكن اكتب اي شي انا اريده يعني ممكن ان اكتب x:=&sal; 4) dbms_output.put_line(' '); هذه الجملة لاخراج النتائج على الشاشة5) لاعادة تنفيذ البرنامج نكتب / ثم Enterطبعا هذه الامور ليست كل شيئ وعند اللزوم يمكن ان نحتاج للأوامر أخرى توضح في وقتها .نبدء في اول مثال .اريد كتابة برنامج يقسم رقمين ويعطيني الناتج ((( برنامج سهل جداااا))) SQL> set serveroutput on SQL> declare 2 a number; 3 b number; 4 c number; 5 begin 6 a:=&a; 7 b:=&b; 8 c:=a/b; 9 dbms_output.put_line('Result Is '||c); 10 end; 11 / Enter value for a: 49 old 6: a:=&a; new 6: a:=49; Enter value for b: 7 old 7: b:=&b; new 7: b:=7; Result Is 7 PL/SQL procedure successfully completed. الحمدلله البرناج يعمل صحيح ولكن انا لا اريد ان تظهر كلمة old وكلمة new في كل مرة الموضوع مزعج لذلك اقوم بكتابة هذا الامر لتخلص من وجود هذه الكلمات وهو SQL> set verify offطبعا بكتب هذا الامر في اي مكان ولكن يستحسن ان يكتب بعد الامر SQL> set serveroutput onوهذه هي النتيجة SQL> set verify off SQL> / Enter value for a: 49 Enter value for b: 7 Result Is 7 PL/SQL procedure successfully completed. طيب في حالة اني قسمت على الرقم صفر ما هي النتيجة ...؟ SQL> / Enter value for a: 15 Enter value for b: 0 declare * ERROR at line 1: ORA-01476: divisor is equal to zero ORA-06512: at line 8 عند القسمة على صفر طلع لنا Error والمستخدم العادي لا يعرف لماذا هناك خطأ ولمعالجة هذا الموضوع نستخدم الــــ Exception كالتالي SQL> declare 2 a number; 3 b number; 4 c number; 5 begin 6 a:=&a; 7 b:=&b; 8 c:=a/b; 9 dbms_output.put_line('Result Is '||c); 10 exception 11 when zero_divide then 12 dbms_output.put_line('You Can Not Divide By Zero ..'); 13 end; 14 / Enter value for a: 15 Enter value for b: 0 You Can Not Divide By Zero .. PL/SQL procedure successfully completed. كتبنا في ال Exception رسالة للمستخدم انه لا يستطيع أدخال الرقم صفر في القسمة .طيب في حالة غلط المستخدم وادخل بدل الرقم حرف ماذا يحصل ...؟ SQL> / Enter value for a: 15 Enter value for b: 'm' declare * ERROR at line 1: ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at line 7 عند أستخدام حرف بدل رقم طلع لنا Error والمستخدم العادي لا يعرف لماذا هناك خطأ ولمعالجة هذا الموضوع نستخدم الــــ Exception كالتالي SQL> ed 1 declare 2 a number; 3 b number; 4 c number; 5 begin 6 a:=&a; 7 b:=&b; 8 c:=a/b; 9 dbms_output.put_line('Result Is '||c); 10 exception 11 when zero_divide then 12 dbms_output.put_line('You Can Not Divide By Zero ..'); 13 when value_error then 14* dbms_output.put_line('Pleas Enter Number ..'); 15 end; 16 / Enter value for a: 15 Enter value for b: 'm' Please Enter Number ... PL/SQL procedure successfully completed. كتبنا في ال Exception رسالة للمستخدم انه لا يستطيع أدخال الا رقم ولا يستطيع أدخال حرف في القسمة .طبعا كل سخص يصيغ الرسالة باسلوبه وبطريقة التي يراها مناسبة .طبعا يوجد انواع اخرى من الـــError وحلولها وإن شاء الله في الدروس القادمة سنوضحها .طبعا انا اسف لأني بطيئ في الشرح ولكن انا اريد ان أمشي خطوة خطوة والتاكد من وضوح كل خطوة .اتمنى ان يكون اسلوبي سهل وسلس. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hannona بتاريخ: 30 مايو 2011 تقديم بلاغ مشاركة بتاريخ: 30 مايو 2011 اليوم سنبدء ببعض الامثلة البسيطة .ولكن قبل ذلك يجب معرفة بعض الامور بالنسبة للغة الــــــPL/SQL 1) يجب قبل كتابة اي برنامج في هذه اللغة كتابة هذه الجملة set serveroutput onلكي تظهر نتيجة اي برناج على الشاشة وبدون هذه الجملة لن تظهر اي نتيجة على الشاشة وبالامكان تجربة البرنامج مع او بدون هذه الجملة .طبعا تكتب هذه الجملة مرة واحدة في كل مرة نفتح فيها شاشة ال Oracle SQL*Plus2) يجب ان ينهتي أي امر في هذه اللغة بـــ ; و بعد كل تعريف موجود في البرنامج تنتهي بــــ ;3) لأدخال اي قيمة في البرنامج يوضع & بعد كتابة المتغير مع اشارة := على سبيل المثال عندي متغير واسمه x واريد ان ادخل قيمة x اكتب التالي x:=&x طبعا بعد & ممكن اكتب اي شي انا اريده يعني ممكن ان اكتب x:=&sal; 4) dbms_output.put_line(' '); هذه الجملة لاخراج النتائج على الشاشة5) لاعادة تنفيذ البرنامج نكتب / ثم Enterطبعا هذه الامور ليست كل شيئ وعند اللزوم يمكن ان نحتاج للأوامر أخرى توضح في وقتها .نبدء في اول مثال .اريد كتابة برنامج يقسم رقمين ويعطيني الناتج ((( برنامج سهل جداااا))) SQL> set serveroutput on SQL> declare 2 a number; 3 b number; 4 c number; 5 begin 6 a:=&a; 7 b:=&b; 8 c:=a/b; 9 dbms_output.put_line('Result Is '||c); 10 end; 11 / Enter value for a: 49 old 6: a:=&a; new 6: a:=49; Enter value for b: 7 old 7: b:=&b; new 7: b:=7; Result Is 7 PL/SQL procedure successfully completed. الحمدلله البرناج يعمل صحيح ولكن انا لا اريد ان تظهر كلمة old وكلمة new في كل مرة الموضوع مزعج لذلك اقوم بكتابة هذا الامر لتخلص من وجود هذه الكلمات وهو SQL> set verify offطبعا بكتب هذا الامر في اي مكان ولكن يستحسن ان يكتب بعد الامر SQL> set serveroutput onوهذه هي النتيجة SQL> set verify off SQL> / Enter value for a: 49 Enter value for b: 7 Result Is 7 PL/SQL procedure successfully completed. طيب في حالة اني قسمت على الرقم صفر ما هي النتيجة ...؟ SQL> / Enter value for a: 15 Enter value for b: 0 declare * ERROR at line 1: ORA-01476: divisor is equal to zero ORA-06512: at line 8 عند القسمة على صفر طلع لنا Error والمستخدم العادي لا يعرف لماذا هناك خطأ ولمعالجة هذا الموضوع نستخدم الــــ Exception كالتالي SQL> declare 2 a number; 3 b number; 4 c number; 5 begin 6 a:=&a; 7 b:=&b; 8 c:=a/b; 9 dbms_output.put_line('Result Is '||c); 10 exception 11 when zero_divide then 12 dbms_output.put_line('You Can Not Divide By Zero ..'); 13 end; 14 / Enter value for a: 15 Enter value for b: 0 You Can Not Divide By Zero .. PL/SQL procedure successfully completed. كتبنا في ال Exception رسالة للمستخدم انه لا يستطيع أدخال الرقم صفر في القسمة .طيب في حالة غلط المستخدم وادخل بدل الرقم حرف ماذا يحصل ...؟ SQL> / Enter value for a: 15 Enter value for b: 'm' declare * ERROR at line 1: ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at line 7 عند أستخدام حرف بدل رقم طلع لنا Error والمستخدم العادي لا يعرف لماذا هناك خطأ ولمعالجة هذا الموضوع نستخدم الــــ Exception كالتالي SQL> ed 1 declare 2 a number; 3 b number; 4 c number; 5 begin 6 a:=&a; 7 b:=&b; 8 c:=a/b; 9 dbms_output.put_line('Result Is '||c); 10 exception 11 when zero_divide then 12 dbms_output.put_line('You Can Not Divide By Zero ..'); 13 when value_error then 14* dbms_output.put_line('Pleas Enter Number ..'); 15 end; 16 / Enter value for a: 15 Enter value for b: 'm' Please Enter Number ... PL/SQL procedure successfully completed. كتبنا في ال Exception رسالة للمستخدم انه لا يستطيع أدخال الا رقم ولا يستطيع أدخال حرف في القسمة .طبعا كل سخص يصيغ الرسالة باسلوبه وبطريقة التي يراها مناسبة .طبعا يوجد انواع اخرى من الـــError وحلولها وإن شاء الله في الدروس القادمة سنوضحها .طبعا انا اسف لأني بطيئ في الشرح ولكن انا اريد ان أمشي خطوة خطوة والتاكد من وضوح كل خطوة .اتمنى ان يكون اسلوبي سهل وسلس. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hannona بتاريخ: 30 مايو 2011 تقديم بلاغ مشاركة بتاريخ: 30 مايو 2011 جزاك الله تعالى كل خير شرح مبسط واكثر من رائع نرجو المزيد ويكون فى اسرع وقت حتى تكون الاستفادة اكثر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
abdoulghaffar بتاريخ: 16 يونيو 2011 تقديم بلاغ مشاركة بتاريخ: 16 يونيو 2011 اخي العزيز بعد السلام عليكم ورحمة الله وبركاته بس هذا هو ال pl spqجزاك الله خير والله على الشرح الرايح والله يوفقك دنيا واخره على هذا العمل الخير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
F-15 S بتاريخ: 20 يونيو 2011 تقديم بلاغ مشاركة بتاريخ: 20 يونيو 2011 والله الاكواد هذي اول مرة اشووفها يازينك ياالكلية اكوادك سهلةوممتعة أما اللي اشوفه في المنتديات والمواقع غير اللي حنا ندرسه اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.