الانتقال إلى المحتوى

دروس Pl/sql من الألف الى الياء


miash80

Recommended Posts

  • بعد 1 شهر...
  • الردود 147
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

  • miash80

    71

  • masmas1001

    9

  • deamon

    8

  • hannona

    6

ان شاء الله في القريب العاجل سأتبع معكم بعض الامثلة المهمة في الحياة العملية

رابط هذا التعليق
شارك

  • بعد 2 شهور...

والله الاكواد هذي اول مرة اشووفها يازينك ياالكلية اكوادك سهلةوممتعة أما اللي اشوفه في المنتديات والمواقع غير اللي حنا ندرسه



ههههههههههههههههههههههه

طبعا اول مرة تشوفها عشان في الجامعة يعطكوا بس اساسيات الاساسيات واذا اعتمد على اكود في الجامعه عمرك ما تشتغل شي
رابط هذا التعليق
شارك

  • بعد 5 شهور...
  • بعد 1 شهر...

جزاك الله خيرا علي المجهود............ وربنا يذيدك علم


الله يبارك فيك اخي العزيز

وانا جاهز لأي استفسار
رابط هذا التعليق
شارك

  • بعد 1 شهر...

الاخوه المشرفين والاعضاء اشكركم كثير على جهدكم المقدر ربنا يجزيكم خير
اوريد توضيح بسيط فى جمله مثلا dbms_output.put_line('name') اريد توضيح الرمز وما يعنيه
,وهل يمكن ان يعمل على اوراكل 11g

رابط هذا التعليق
شارك


الاخوه المشرفين والاعضاء اشكركم كثير على جهدكم المقدر ربنا يجزيكم خير
اوريد توضيح بسيط فى جمله مثلا dbms_output.put_line('name') اريد توضيح الرمز وما يعنيه
,وهل يمكن ان يعمل على اوراكل 11g


نعتذر عن هذا الخطأ الموجود في بعض الأكواد ... واليك هذه المشاركة لكيفية التصحيح

تنويه : تصحيح لخطأ حدث لبعض الرموز الخاصة المستخدمة فى الأوامر ... اثناء تطوير الموقع

http://www.araboug.org/ib/index.php?showtopic=48829
رابط هذا التعليق
شارك

  • بعد 1 سنة...

سؤال

اجراء يقوم بحذف الموظفين الذين يقعون في ( location_id (1700  من جدول الادارات  departments ومرتباتهم لاتنحصر بين 1000 و  2999  من جدول الموظفين employees ؟

رابط هذا التعليق
شارك

  • بعد 10 شهور...

سلام عليكم عاوز اسالكم عن معني
Sum(9,3) in plsql what ماهو معني) 9,3) بين الاقواس

رابط هذا التعليق
شارك

  • بعد 1 شهر...

 

جزاك الله خير الجزاء 

بـــــــــــــــــــــــــــــ الله ــــــــــــــ فيـك ــــــــــارك

 

رابط هذا التعليق
شارك

  • بعد 1 سنة...

 

جزاك الله خير الجزاء 

بـــــــــــــــــــــــــــــ الله ــــــــــــــ فيـك ــــــــــارك

 

 

  ولك بالمثل أخي العزيز

رابط هذا التعليق
شارك

  • بعد 11 شهور...

السلام عليكم ورحمة الله وبركاته

 

اسف اخواني الاعزاء في التأخر في تكملة الدروس

 

اليوم سنقوم بشرح للـــ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 في حالة عدم وجود اسئلة .

رابط هذا التعليق
شارك

لو سمحت الامر wrot file afiedt .bufe ما وظيفته

 

اخي العزيز  عند كتابة كود معين في بيئة SQL

 

واردنا التعديل على هذا الكود نكتب ED  ثم نضغط أنتر يخرج لنا رسالة Wrote file afiedt.buf

 

لتعديل على هذا الكود

 

وسلامتك

رابط هذا التعليق
شارك

  • بعد 7 شهور...
  • بعد 1 شهر...
  • بعد 7 شهور...
  • بعد 1 سنة...
في ٥‏/١‏/٢٠١١ 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

وأقوم بكتابة امثلة للحياة العملية .

السلام عليكم ورحمة الله وبركاته

السلام عليكم 

شكرا جزيلا استاذ موسى شرح رااااااااااااااااااااااااائع جدا ومبسط  

ياترى ممكن بقية الدروس لو سمحت  انا قريت كل الدروس ومحتاجه للبقيه وجزاك الله خير 

رابط هذا التعليق
شارك

  • بعد 1 سنة...
  • بعد 1 سنة...

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية