abdoulghaffar بتاريخ: 21 يونيو 2011 تقديم بلاغ مشاركة بتاريخ: 21 يونيو 2011 اذا تقدر كمل الدوره ترى ممتازه وندعيلك حبيبي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 25 يوليو 2011 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 25 يوليو 2011 ان شاء الله في القريب العاجل سأتبع معكم بعض الامثلة المهمة في الحياة العملية اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 20 أكتوبر 2011 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 20 أكتوبر 2011 بأنتظار اسئلتكم وأستفسارتكم اخواني واخواتي الاعزاء ..... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 20 أكتوبر 2011 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 20 أكتوبر 2011 والله الاكواد هذي اول مرة اشووفها يازينك ياالكلية اكوادك سهلةوممتعة أما اللي اشوفه في المنتديات والمواقع غير اللي حنا ندرسه ههههههههههههههههههههههه طبعا اول مرة تشوفها عشان في الجامعة يعطكوا بس اساسيات الاساسيات واذا اعتمد على اكود في الجامعه عمرك ما تشتغل شي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Diba بتاريخ: 9 أبريل 2012 تقديم بلاغ مشاركة بتاريخ: 9 أبريل 2012 جزاك الله خيرا علي المجهود............ وربنا يذيدك علم اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 13 مايو 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 13 مايو 2012 جزاك الله خيرا علي المجهود............ وربنا يذيدك علم الله يبارك فيك اخي العزيزوانا جاهز لأي استفسار اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
rifaat بتاريخ: 7 يوليو 2012 تقديم بلاغ مشاركة بتاريخ: 7 يوليو 2012 شكرا جزيلا اخوتى على الشرح وبارك الله فيكماريد نوهكم الى توضيح الشرح بطريقة ابسط للتسهيل الفهم اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
rifaat بتاريخ: 11 يوليو 2012 تقديم بلاغ مشاركة بتاريخ: 11 يوليو 2012 الاخوه المشرفين والاعضاء اشكركم كثير على جهدكم المقدر ربنا يجزيكم خيراوريد توضيح بسيط فى جمله مثلا dbms_output.put_line('name') اريد توضيح الرمز وما يعنيه,وهل يمكن ان يعمل على اوراكل 11g اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Amgad بتاريخ: 11 يوليو 2012 تقديم بلاغ مشاركة بتاريخ: 11 يوليو 2012 الاخوه المشرفين والاعضاء اشكركم كثير على جهدكم المقدر ربنا يجزيكم خيراوريد توضيح بسيط فى جمله مثلا dbms_output.put_line('name') اريد توضيح الرمز وما يعنيه,وهل يمكن ان يعمل على اوراكل 11g نعتذر عن هذا الخطأ الموجود في بعض الأكواد ... واليك هذه المشاركة لكيفية التصحيح تنويه : تصحيح لخطأ حدث لبعض الرموز الخاصة المستخدمة فى الأوامر ... اثناء تطوير الموقعhttp://www.araboug.org/ib/index.php?showtopic=48829 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
الحبوب13 بتاريخ: 26 نوفمبر 2013 تقديم بلاغ مشاركة بتاريخ: 26 نوفمبر 2013 سؤال اجراء يقوم بحذف الموظفين الذين يقعون في ( location_id (1700 من جدول الادارات departments ومرتباتهم لاتنحصر بين 1000 و 2999 من جدول الموظفين employees ؟ اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
almatrix بتاريخ: 25 أكتوبر 2014 تقديم بلاغ مشاركة بتاريخ: 25 أكتوبر 2014 سلام عليكم عاوز اسالكم عن معنيSum(9,3) in plsql what ماهو معني) 9,3) بين الاقواس اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hamdan alsbri بتاريخ: 7 ديسمبر 2014 تقديم بلاغ مشاركة بتاريخ: 7 ديسمبر 2014 جزاك الله خير الجزاء بـــــــــــــــــــــــــــــ الله ــــــــــــــ فيـك ــــــــــارك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 24 يناير 2016 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 24 يناير 2016 جزاك الله خير الجزاء بـــــــــــــــــــــــــــــ الله ــــــــــــــ فيـك ــــــــــارك ولك بالمثل أخي العزيز اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 24 يناير 2016 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 24 يناير 2016 موضوع قديم أتمنى ان اكون وفقت بشرح هذه الدروس بدقة اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
salwa saleh بتاريخ: 17 يناير 2017 تقديم بلاغ مشاركة بتاريخ: 17 يناير 2017 السلام عليكم ورحمة الله وبركاته اسف اخواني الاعزاء في التأخر في تكملة الدروس اليوم سنقوم بشرح للـــFunction ابن عم الـــــــProcedure ولكن لنعمل مراجعة بسيطة للــتعريف الـــ Procedure قلنا انا الــProcedure هو عبارة عن برنامج له اسم ويخزن في قاعدة البيانات ويمرر له براميتر ويرجع لي قيمة معينة ويقوم بأكثر من عملية في البرنامج الواحد وأستطيع استدعائه في أي وقت انا بحاجته واقوم بتنفيذه . عندي أضافة في التعريف الــ Procedure ممكن يرجع قيمة وحدة وممكن ان يرجع اكثر من قيمة لاكثر من نوع من البيانات او يرجع اكثر من قيمة من نفس النوع وممكن ان لا يرجع أي قيمة .(((كلام جميل ))) الان سنبدء في الشرح عن ابن عم الــــ Procedure وهو ابن العم الــFunction . بسم الله نبدء اولا سنقوم بتعريف الــFunction . تعريف رقم (((1))) هو عبارة عن برنامج له اسم ويخزن في قاعدة البيانات ويمرر له براميتر ويرجع لي دائما قيمة واحدة فقط ويجب ان يرجع قيمة (((احد الفروق مع الــ Procedure))) ويقوم بأكثر من عملية في البرنامج الواحد وأستطيع استدعائه في أي وقت انا بحاجته تعريف رقم (((2))) هو عبارة عن برنامج بخيل جداًاًاًاًاً بحيث لا يقوم الا بأرجاع قيمة واحدة فقط تعريف رقم (((3))) هو عبارة عن برنامج شايف حاله لا يقوم الا بنقل كبار الزوار ((( الطبقة المخملية))) وكما نعرف اصحاب هذه الطبقة لهم بروتوكول خاص بهم اذ لا يجوز ارجاع اكثر من واحد في كل مرة يقوم البرنامج بعمله . والان سنقوم بشرح كيفية كتابة الـــ Function Create [Or Replace] Function Function-Name هنا نقوم بأنشاء الاقتران (P1 in Number,P2 out Varchar2,P3 in out date....) هنا نقوم بتعريف البراميتر Return Data Type هنا بوضع نوع البيانات التي سيقوم الــFunction بأرجاعها Is كلمة اجبارية Variables Decleration Section هذا الجزء من البرنامج يعرف فيه المتغيرات بأنواعها Begin (Mandatory) بداية الاجراء وهذا الجزء أجباري Eexcutable Section هنا يكتب كود البرمجة الخاص بالبرنامج Pl/Sql Code . . . Return Value; هنا نضع القيمة التي يريد الــFunction أرجاعها [Exception] (Optional)هذا الجزء خاص بمعالجة أخطاء الاجراء وهو أختياري . . . Return Value; هنا نضع القيمة التي يريد الــFunction أرجاعها في حالة حدوث Error End [Function-Name]; (Mandatory) نهاية البرنامج وهذا الجزء أجباري سنبدء في مثال صغير للكتابة الــــFunction أريد ان اكتب برنامج صغير يقوم بجمع رقمين وأخراج الناتج بسم الله نبدء SQL> set serveroutput on SQL> set verify off SQL> create or replace function Tot(X in number,Y in number) 2 Return Number 3 is 4 Begin 5 Return X+Y; 6 end; 7 / Function created. الان سنقوم بأستدعاء الـــFunction كألاتي . يجب تعريف متغير من نفس نوع القيمة التي سيقوم الــ Function بأسترجاعها لوضع قيمة الـــ Function فيها كألاتي . PL/SQL procedure successfully completed. SQL> Declare 2 Z number; 3 begin 4 Z:=Tot(8,9); 5 Print('Total = '||Z); 6 end; 7 / Total = 17 PL/SQL procedure successfully completed. او أستخدام هذه الطريقة لادخال ارقام مختلفة في كل مرة . SQL> Declare 2 Z number; 3 Begin 4 Z:=Tot(&N1,&n2); 5 Print('Total = '||Z); 6 end; 7 / Enter value for n1: 7 Enter value for n2: 5 Total = 12 PL/SQL procedure successfully completed. SQL> / Enter value for n1: 90 Enter value for n2: 77 Total = 167 PL/SQL procedure successfully completed. SQL> / Enter value for n1: 50 Enter value for n2: 80 Total = 130 PL/SQL procedure successfully completed. مثال جديد . أريد ان اكتب Function يحسب الراتب السنوي . بسم الله نبدء SQL> Create or replace Function Ann_Sal(P_sal in number,P_Comm in number) 2 Return Number 3 is 4 Begin 5 Return P_sal*12+nvl(p_Comm,0); 6 end; 7 / Function created. وطريقة الاستدعاء هي . SQL> Declare 2 V_Sal Number; 3 Begin 4 V_Sal:=Ann_Sal(100,10); 5 Print('Salary Year = '||V_Sal); 6 end; 7 / Salary Year = 1210 PL/SQL procedure successfully completed. مثال جديد . أريد ان اكتب نفس المثال السابق ولكن اريد ان اعطيه رقم الموظف ويحسب الراتب السنوي SQL> ed Wrote file afiedt.buf 1 Create or replace Function Ann_Sal(P_Empno in number) 2 Return Number 3 is 4 V_Ann number; 5 Begin 6 Select sal*12+nvl(Comm,0) 7 into V_Ann 8 From Emp 9 Where Empno=P_Empno; 10 Return V_Ann; 11 Exception 12 When Others Then 13 Return 0; 14* end; 15 / Function created. وطريقة الاستدعاء . SQL> Declare 2 V_sal Number; 3 Begin 4 v_sal:=Ann_Sal(&P_Empno); 5 Print('Salary Year = '||V_sal); 6 end; 7 / Enter value for p_empno: 7900 Salary Year = 11400 PL/SQL procedure successfully completed. SQL> / Enter value for p_empno: 7782 Salary Year = 29400 PL/SQL procedure successfully completed. SQL> / Enter value for p_empno: 7876 Salary Year = 13200 PL/SQL procedure successfully completed. أما في حالة ادخلنا رقم خطأ ما هي النتيجة لنرى . SQL> / Enter value for p_empno: 5444 Salary Year = 0 PL/SQL procedure successfully completed. لقد قام بأرجاع القيمة صفر الموجودة داخل الــ Exception مثال جديد . أريد ان اكتب Function اعطيه رقم الموظف يعطيني رقم مديره . create or replace function Manger(P_Empno in number) Return Varchar2 is Cursor C_Manger is select m.ename from emp e,emp m where e.mgr=m.empno and e.empno=p_empno; V_Manger C_Manger%rowtype; begin open C_Manger; fetch C_Manger into V_Manger; If C_Manger%Notfound then Return 'Big Bossss'; else Return V_Manger.Ename; end if; Close C_Manger; end; SQL> / Function created. وطريقة الاستدعاء SQL> Declare 2 V_Manager Varchar2(100); 3 Begin 4 V_Manager:=Manger(&P_Empno); 5 Print('Manger Name : '||V_Manager); 6 end; 7 / Enter value for p_empno: 7369 Manger Name : FORD PL/SQL procedure successfully completed. SQL> / Enter value for p_empno: 7698 Manger Name : KING PL/SQL procedure successfully completed. SQL> / Enter value for p_empno: 7934 Manger Name : CLARK PL/SQL procedure successfully completed. طيب على فرض أدخلنا رقم موظف ليس له رقم مدير ماذا يحصل SQL> / Enter value for p_empno: 7839 Manger Name : Big Bossss PL/SQL procedure successfully completed. الموظف الذي ليس له مدير هو المدير الرئيسي كلام جميل الان بعد هذا الشرح للكل من الـــProcdeure والـــFunction هل لاحظتم ما هي الفروق بينهم في الدرس القادم سأعطي شرح بسيط للمقارنة بين الــProcedure والــ Function في حالة عدم وجود اسئلة . 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
salwa saleh بتاريخ: 17 يناير 2017 تقديم بلاغ مشاركة بتاريخ: 17 يناير 2017 لو سمحت الامر wrot file afiedt .bufe ما وظيفته اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 18 يناير 2017 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 18 يناير 2017 لو سمحت الامر wrot file afiedt .bufe ما وظيفته اخي العزيز عند كتابة كود معين في بيئة SQL واردنا التعديل على هذا الكود نكتب ED ثم نضغط أنتر يخرج لنا رسالة Wrote file afiedt.buf لتعديل على هذا الكود وسلامتك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 6 سبتمبر 2017 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 6 سبتمبر 2017 مستمرون بأذن الله 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 9 أكتوبر 2017 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 9 أكتوبر 2017 ........... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 10 مايو 2018 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 10 مايو 2018 مبارك شهر رمضان اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
salwa2020 بتاريخ: 10 ديسمبر 2019 تقديم بلاغ مشاركة بتاريخ: 10 ديسمبر 2019 في ٥/١/٢٠١١ at 18:31, miash80 said: السلام عليكم ورحمة الله وبركاته انا اكرر اعتذاري اخواني واخواتي الاعزاء على التأخر في كتابة الدروس اليوم بأذن الله اكون قد كتبة اخر درس في مادة الــــ 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 >; نهاية التريجر قبل البدء في كتابة الامثلة هنالك موضوع يجب شرحه وهو Qualifiers Qualifiers 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 وأقوم بكتابة امثلة للحياة العملية . السلام عليكم ورحمة الله وبركاته استاذ موسى اولا شكرا جزيلا للشرح الاكثر من رااااااااااااااااااااااااااائع انا استفدت جدا من دروسك بس اين بقيه الامثله الي قلت عليها ؟؟؟؟؟؟؟؟؟؟؟ ويااااا ريت لو تكمل باقي الدروس في ٥/١/٢٠١١ at 18:31, miash80 said: السلام عليكم ورحمة الله وبركاته انا اكرر اعتذاري اخواني واخواتي الاعزاء على التأخر في كتابة الدروس اليوم بأذن الله اكون قد كتبة اخر درس في مادة الــــ 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 >; نهاية التريجر قبل البدء في كتابة الامثلة هنالك موضوع يجب شرحه وهو Qualifiers Qualifiers 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 وأقوم بكتابة امثلة للحياة العملية . السلام عليكم ورحمة الله وبركاته السلام عليكم شكرا جزيلا استاذ موسى شرح رااااااااااااااااااااااااائع جدا ومبسط ياترى ممكن بقية الدروس لو سمحت انا قريت كل الدروس ومحتاجه للبقيه وجزاك الله خير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 16 أغسطس 2021 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 16 أغسطس 2021 Good Luck اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 28 أغسطس 2022 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 28 أغسطس 2022 عدنا وان شاء الله بخير 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.