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

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


miash80

Recommended Posts


نتمني تجميع جميع الدروس في ملف واحد
حتي يتثني المراجعة بعد ذلك
وشكرا لمجهودك الجبار


الله يسلمك اخي محمد

ان شاء الله بعد الانتهاء من اخر درس سأقوم بتجميع هذه الدروس واضعها في ملف واحد

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

  • الردود 147
  • البداية
  • اخر رد

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

  • miash80

    71

  • masmas1001

    9

  • deamon

    8

  • hannona

    6


وهكذا


ومن خلال هذه الجمل استطيع التعديل على الــ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 %

اتمنى ان اكون اوصلت الفكرة اخي العزيز

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





ثالثاً : يرجى توضيح وشرح الفرق بين أنواع الـ 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 يوجد امثلة اخرى يكمن الاستفادة منها .

ارجوا ان اكون اوصلت الفكرة .


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


العضو العزيز
السلام عليكم ورحمة الله وبركاته
جميل ما قد شرحت وجزاك الله كل خير وغفر لك
ولكن احب ان اقترح اقتراحا وهو حبذا لو كان الشرح من خلال ملف كامل مثل doc او pdf والغاية من اقتراحي هو التوثيق لدينا كمرجع مكتوب فيما لون اردنا مراجعته ثانية
وجزاك الله كل خير


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

الله يبارك فيك اخي الفاضل

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

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


شكرا لك اخي العزيز

وجزاك الله كل خير على ما بذلته من جهد لمساعدة اخوانك في المنتدى


وحياك الله في بلدك الثاني السعوديه



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

فعلا بلدي الثاني السعودية

بلد طيب وشعب طيب

مشكور اخي علىت مرورك

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


اللهم اغفر لك ما تقدم من ذنبك و ما تأخر..اللهم احسن خاتمتك


اللهم اغفر لوالديك و ارحمهما و ادخلهما جناتك برحمتك يا أرحم الراحمين

جزاك الله عنا كل خير :lol:
بالتوفيق ،




الله يبارك فيك اخي العزيز على الدعاء ولك بالمثل ان شاء الله

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


شكراّ علي الشرح الواضح والمميذ استفدت كتير
نتمني ان تواصل في الشرح


العفو اخي العزيز

ان الان اكتب في اخر درس في الـــPL/SQL

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

  • بعد 2 أسابيع...

بارك الله فيك يا اخي ونحن في انتظار المذيد من الدروس



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

مشكور على مرورك الطيب

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

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

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

اليوم بأذن الله اكون قد كتبة اخر درس في مادة الــــ 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
رابط هذا التعليق
شارك


جزاك الله الف خير
الله يغفرلك ولوالديك


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

مشكور على مرورك الطيب تم تعديل بواسطة miash80
رابط هذا التعليق
شارك

ان شاء الله اذا لم يوجد أي أسئلة سأقوم بكتاية امثلة توضيحة اكثر عن الــTrigger


مع كتابة تلخيص عن الـــTrigger


يوم السبت القادم

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

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

اخواني واخواتي مشرفين وأعضاء السلام عليكم ورحمة الله وبركاته



وانا اسف للأنقطاع عن المنتدى مدة طويلة بسبب ظروف الحياة .

وشكر خاص لكل من سئل عني

والله يسعدكم جميعا


اليوم والحمدلله بدءت بكتابة بعض الدروس التي تشمل قسم 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;



أتمنى ان اكون اوصلت معلومة بشكل صحيح ومناسب

فإن أصبت فمن الله وإن أخطأت فمن الشيطان ،،

إن شاء الله في المرة القادمة بعد الأخذ برأيكم وأسئلتكم

سأبدء بكتابة الامثلة إن شاء الله

أدعو لي بالتوفيق


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


اخواني واخواتي مشرفين وأعضاء السلام عليكم ورحمة الله وبركاته



وانا اسف للأنقطاع عن المنتدى مدة طويلة بسبب ظروف الحياة .

وشكر خاص لكل من سئل عني

والله يسعدكم جميعا


اليوم والحمدلله بدءت بكتابة بعض الدروس التي تشمل قسم 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;



أتمنى ان اكون اوصلت معلومة بشكل صحيح ومناسب

فإن أصبت فمن الله وإن أخطأت فمن الشيطان ،،

إن شاء الله في المرة القادمة بعد الأخذ برأيكم وأسئلتكم

سأبدء بكتابة الامثلة إن شاء الله

أدعو لي بالتوفيق


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


اليوم سنبدء ببعض الامثلة البسيطة .

ولكن قبل ذلك يجب معرفة بعض الامور بالنسبة للغة الــــــPL/SQL

1) يجب قبل كتابة اي برنامج في هذه اللغة كتابة هذه الجملة set serveroutput on

لكي تظهر نتيجة اي برناج على الشاشة وبدون هذه الجملة لن تظهر اي نتيجة على الشاشة

وبالامكان تجربة البرنامج مع او بدون هذه الجملة .

طبعا تكتب هذه الجملة مرة واحدة في كل مرة نفتح فيها شاشة ال Oracle SQL*Plus

2) يجب ان ينهتي أي امر في هذه اللغة بـــ ; و بعد كل تعريف موجود في البرنامج تنتهي بــــ ;

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 وحلولها وإن شاء الله في الدروس القادمة سنوضحها .

طبعا انا اسف لأني بطيئ في الشرح ولكن انا اريد ان أمشي خطوة خطوة والتاكد من وضوح كل خطوة .

اتمنى ان يكون اسلوبي سهل وسلس.

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


اليوم سنبدء ببعض الامثلة البسيطة .

ولكن قبل ذلك يجب معرفة بعض الامور بالنسبة للغة الــــــPL/SQL

1) يجب قبل كتابة اي برنامج في هذه اللغة كتابة هذه الجملة set serveroutput on

لكي تظهر نتيجة اي برناج على الشاشة وبدون هذه الجملة لن تظهر اي نتيجة على الشاشة

وبالامكان تجربة البرنامج مع او بدون هذه الجملة .

طبعا تكتب هذه الجملة مرة واحدة في كل مرة نفتح فيها شاشة ال Oracle SQL*Plus

2) يجب ان ينهتي أي امر في هذه اللغة بـــ ; و بعد كل تعريف موجود في البرنامج تنتهي بــــ ;

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 وحلولها وإن شاء الله في الدروس القادمة سنوضحها .

طبعا انا اسف لأني بطيئ في الشرح ولكن انا اريد ان أمشي خطوة خطوة والتاكد من وضوح كل خطوة .

اتمنى ان يكون اسلوبي سهل وسلس.

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

  • بعد 3 أسابيع...

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

بس هذا هو ال pl spq

جزاك الله خير والله على الشرح الرايح والله يوفقك دنيا واخره على هذا العمل الخير

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

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

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

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

×   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.

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

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

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