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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
* * * * * 1 صوت

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


138 رد (ردود) على هذا الموضوع

#46 miash80

miash80

    عضو مميز

  • الأعضــاء
  • 793 مشاركة
  • الاسم الأول:mousa
  • اسم العائلة:hamdallah
  • البـلـد: Country Flag
  • الاهتمامات:Read
  • المنصب الحالي:Analyst Assistant

تاريخ المشاركة 09 January 2010 - 01:14 PM

جزاك الله خيرا جزاك الله خيرا جزاك الله خيرا يا أخ موسى أنا شاكر جدا على هذا التوضييح الرائع بلا نزاع بارك الله فيك وكثر من أمثالك :lol: ;) ;) :lol:


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

وإن شاء الله ستفيد من هذه الدروس اكثر



:D ;) ;)

اللهم أغفر للمسلمين والمسلمات والمؤمينين والمؤمينات ألاحياء منهم وألاموات الى يوم الدين


موضوع قرأتة فأعجبني
http://www.shbab1.com/2minutes.htm

اذا عجبك موضوع من مواضيعي..لا تقل لي شكراً
و لكن أدعو لي (في ظهر الغيب) بالآتي

اللهم اغفر له ما تقدم من ذنبه و ما تأخر..اللهم احسن خاتمته
اللهم اغفر لوالديه و ارحمهما و ادخلهما جناتك برحمتك يا أرحم الراحمين و لكم بالمثل ان شاء الله
ارجو من الله ان يكون ما انقله لكم من ضمن حسناتى
 356663087.jpg

 

لا تأســــفنَّ عـلى غــــــدرِ الزمــانِ لطالــمـا

رقصـــــــت على جثــــثِ الأســــــــودِ كلابا

لا تحسبن برقصـــــها تعلوا على أســــيادها
تبقى الأســــودُ أسوداً والكـــــلابُ كِــــــلابا


#47 miash80

miash80

    عضو مميز

  • الأعضــاء
  • 793 مشاركة
  • الاسم الأول:mousa
  • اسم العائلة:hamdallah
  • البـلـد: Country Flag
  • الاهتمامات:Read
  • المنصب الحالي:Analyst Assistant

تاريخ المشاركة 09 January 2010 - 01:17 PM

شكرا يا موسى باشا بجد على الرد دا انا لسة هفهم الموضوع نظرا لطروف عائلية بس شوفت ردك على الموضوع

وانا اسمي محمد سمير من مصر من القاهرة

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



الله يبارك فيك اخي محمد

انا الي الشرف اني تعرفت بيك اخي العزيز

اليوم إن شاء الله سأكمل شرح الـــــــــــ Procedure


اللهم أغفر للمسلمين والمسلمات والمؤمينين والمؤمينات ألاحياء منهم وألاموات الى يوم الدين


موضوع قرأتة فأعجبني
http://www.shbab1.com/2minutes.htm

اذا عجبك موضوع من مواضيعي..لا تقل لي شكراً
و لكن أدعو لي (في ظهر الغيب) بالآتي

اللهم اغفر له ما تقدم من ذنبه و ما تأخر..اللهم احسن خاتمته
اللهم اغفر لوالديه و ارحمهما و ادخلهما جناتك برحمتك يا أرحم الراحمين و لكم بالمثل ان شاء الله
ارجو من الله ان يكون ما انقله لكم من ضمن حسناتى
 356663087.jpg

 

لا تأســــفنَّ عـلى غــــــدرِ الزمــانِ لطالــمـا

رقصـــــــت على جثــــثِ الأســــــــودِ كلابا

لا تحسبن برقصـــــها تعلوا على أســــيادها
تبقى الأســــودُ أسوداً والكـــــلابُ كِــــــلابا


#48 DrZevagoo

DrZevagoo

    عضو

  • الأعضــاء
  • 1 مشاركة

تاريخ المشاركة 09 January 2010 - 04:16 PM

جزاك الله كل خير يا اخى عمل رائع ومشكور ومقبول باذن الله
الى جانب طريقة الشرح سهلة مبسطة للغاية

#49 masmas1001

masmas1001

    مشترك

  • الأعضــاء
  • 61 مشاركة

تاريخ المشاركة 10 January 2010 - 01:32 PM

اخي العزيز miash80 ارجوا ان تكون بخير وفي احوال جيدة

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

وجزاك الله خير ودوام الصحة والعافية

#50 المبرمجة المبتدئة

المبرمجة المبتدئة

    عضو

  • الأعضــاء
  • 6 مشاركة

تاريخ المشاركة 10 January 2010 - 03:16 PM

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

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

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

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


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


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

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

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

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

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



#51 المبرمجة المبتدئة

المبرمجة المبتدئة

    عضو

  • الأعضــاء
  • 6 مشاركة

تاريخ المشاركة 10 January 2010 - 03:20 PM

أخي miash80 جزاك الله عنا كل خير وارجو الاستمرار في الدروس بهذا الاسلوب كونه اسلوب واضح وبسيط مع الشكر الجزيل لك ولجهودك

#52 miash80

miash80

    عضو مميز

  • الأعضــاء
  • 793 مشاركة
  • الاسم الأول:mousa
  • اسم العائلة:hamdallah
  • البـلـد: Country Flag
  • الاهتمامات:Read
  • المنصب الحالي:Analyst Assistant

تاريخ المشاركة 11 January 2010 - 02:14 PM

جزاك الله كل خير يا اخى عمل رائع ومشكور ومقبول باذن الله
الى جانب طريقة الشرح سهلة مبسطة للغاية


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

والحمدلله انوا اسلوب الشرح سهل


اللهم أغفر للمسلمين والمسلمات والمؤمينين والمؤمينات ألاحياء منهم وألاموات الى يوم الدين


موضوع قرأتة فأعجبني
http://www.shbab1.com/2minutes.htm

اذا عجبك موضوع من مواضيعي..لا تقل لي شكراً
و لكن أدعو لي (في ظهر الغيب) بالآتي

اللهم اغفر له ما تقدم من ذنبه و ما تأخر..اللهم احسن خاتمته
اللهم اغفر لوالديه و ارحمهما و ادخلهما جناتك برحمتك يا أرحم الراحمين و لكم بالمثل ان شاء الله
ارجو من الله ان يكون ما انقله لكم من ضمن حسناتى
 356663087.jpg

 

لا تأســــفنَّ عـلى غــــــدرِ الزمــانِ لطالــمـا

رقصـــــــت على جثــــثِ الأســــــــودِ كلابا

لا تحسبن برقصـــــها تعلوا على أســــيادها
تبقى الأســــودُ أسوداً والكـــــلابُ كِــــــلابا


#53 miash80

miash80

    عضو مميز

  • الأعضــاء
  • 793 مشاركة
  • الاسم الأول:mousa
  • اسم العائلة:hamdallah
  • البـلـد: Country Flag
  • الاهتمامات:Read
  • المنصب الحالي:Analyst Assistant

تاريخ المشاركة 11 January 2010 - 02:16 PM

اخي العزيز miash80 ارجوا ان تكون بخير وفي احوال جيدة

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

وجزاك الله خير ودوام الصحة والعافية



اهلا بأخي العزيز

اخي انا اسمي موسى

وإن شاء الله اليوم سأكمل موضوع الـــــــــ Prcedure

اللهم أغفر للمسلمين والمسلمات والمؤمينين والمؤمينات ألاحياء منهم وألاموات الى يوم الدين


موضوع قرأتة فأعجبني
http://www.shbab1.com/2minutes.htm

اذا عجبك موضوع من مواضيعي..لا تقل لي شكراً
و لكن أدعو لي (في ظهر الغيب) بالآتي

اللهم اغفر له ما تقدم من ذنبه و ما تأخر..اللهم احسن خاتمته
اللهم اغفر لوالديه و ارحمهما و ادخلهما جناتك برحمتك يا أرحم الراحمين و لكم بالمثل ان شاء الله
ارجو من الله ان يكون ما انقله لكم من ضمن حسناتى
 356663087.jpg

 

لا تأســــفنَّ عـلى غــــــدرِ الزمــانِ لطالــمـا

رقصـــــــت على جثــــثِ الأســــــــودِ كلابا

لا تحسبن برقصـــــها تعلوا على أســــيادها
تبقى الأســــودُ أسوداً والكـــــلابُ كِــــــلابا


#54 miash80

miash80

    عضو مميز

  • الأعضــاء
  • 793 مشاركة
  • الاسم الأول:mousa
  • اسم العائلة:hamdallah
  • البـلـد: Country Flag
  • الاهتمامات:Read
  • المنصب الحالي:Analyst Assistant

تاريخ المشاركة 11 January 2010 - 02:18 PM

أخي miash80 جزاك الله عنا كل خير وارجو الاستمرار في الدروس بهذا الاسلوب كونه اسلوب واضح وبسيط مع الشكر الجزيل لك ولجهودك


اهلا وسهلا بأختي الفاضلة المبرمجة المبتدئة

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

وعقبال ما ناديكي بالمبرمجة الاولى


اللهم أغفر للمسلمين والمسلمات والمؤمينين والمؤمينات ألاحياء منهم وألاموات الى يوم الدين


موضوع قرأتة فأعجبني
http://www.shbab1.com/2minutes.htm

اذا عجبك موضوع من مواضيعي..لا تقل لي شكراً
و لكن أدعو لي (في ظهر الغيب) بالآتي

اللهم اغفر له ما تقدم من ذنبه و ما تأخر..اللهم احسن خاتمته
اللهم اغفر لوالديه و ارحمهما و ادخلهما جناتك برحمتك يا أرحم الراحمين و لكم بالمثل ان شاء الله
ارجو من الله ان يكون ما انقله لكم من ضمن حسناتى
 356663087.jpg

 

لا تأســــفنَّ عـلى غــــــدرِ الزمــانِ لطالــمـا

رقصـــــــت على جثــــثِ الأســــــــودِ كلابا

لا تحسبن برقصـــــها تعلوا على أســــيادها
تبقى الأســــودُ أسوداً والكـــــلابُ كِــــــلابا


#55 المبرمجة المبتدئة

المبرمجة المبتدئة

    عضو

  • الأعضــاء
  • 6 مشاركة

تاريخ المشاركة 12 January 2010 - 09:59 AM

أخي الفاضل جزاك الله كل خيرررررررررر

#56 miash80

miash80

    عضو مميز

  • الأعضــاء
  • 793 مشاركة
  • الاسم الأول:mousa
  • اسم العائلة:hamdallah
  • البـلـد: Country Flag
  • الاهتمامات:Read
  • المنصب الحالي:Analyst Assistant

تاريخ المشاركة 13 January 2010 - 11:57 PM

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

أسف اخواني الاعزاء على هذا التأخير في تكملة الدروس بسبب ضغوط الشغل هذه الايام

إن شاء الله يوم السبت سأكمل بقية الدروس

اكرر أسفي اخواني الاعزاء


اللهم أغفر للمسلمين والمسلمات والمؤمينين والمؤمينات ألاحياء منهم وألاموات الى يوم الدين


موضوع قرأتة فأعجبني
http://www.shbab1.com/2minutes.htm

اذا عجبك موضوع من مواضيعي..لا تقل لي شكراً
و لكن أدعو لي (في ظهر الغيب) بالآتي

اللهم اغفر له ما تقدم من ذنبه و ما تأخر..اللهم احسن خاتمته
اللهم اغفر لوالديه و ارحمهما و ادخلهما جناتك برحمتك يا أرحم الراحمين و لكم بالمثل ان شاء الله
ارجو من الله ان يكون ما انقله لكم من ضمن حسناتى
 356663087.jpg

 

لا تأســــفنَّ عـلى غــــــدرِ الزمــانِ لطالــمـا

رقصـــــــت على جثــــثِ الأســــــــودِ كلابا

لا تحسبن برقصـــــها تعلوا على أســــيادها
تبقى الأســــودُ أسوداً والكـــــلابُ كِــــــلابا


#57 masmas1001

masmas1001

    مشترك

  • الأعضــاء
  • 61 مشاركة

تاريخ المشاركة 14 January 2010 - 11:26 AM

عزيزي الاخ موسى

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

#58 miash80

miash80

    عضو مميز

  • الأعضــاء
  • 793 مشاركة
  • الاسم الأول:mousa
  • اسم العائلة:hamdallah
  • البـلـد: Country Flag
  • الاهتمامات:Read
  • المنصب الحالي:Analyst Assistant

تاريخ المشاركة 16 January 2010 - 05:55 PM

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

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

اليوم أنشاء الله سنكمل الدروس

توقفنا في الدرس السابق عند هذا المثال


مثال جديد اريد ان أستخدم فيه خاصية الاضافة


اريد ان اكتب Procedure يقوم باضافة أسم وموقع القسم في جدول الاقسام


QL> create or replace procedure insert_dept (p_dname in dept.dname%type,p_loc in dept.loc%type)
  2  is
  3  v_deptno number;
  4  begin
  5  select max(deptno)
  6  into v_deptno
  7  from dept;
  8  v_deptno:=v_deptno+10;
  9  insert into dept
 10  values(v_deptno,p_dname,p_loc);
 11  commit;
 12* end;
SQL> /

Procedure created.

طريقة الاستدعاء


SQL> begin
  2  insert_dept('Finance','Amman');
  3  end;
  4  /

PL/SQL procedure successfully completed.

ولتأكد من انه اضاف البيانات الجديدة

SQL> select *
  2  from dept;

   DEPTNO DNAME		  LOC
--------- -------------- -------------
	   10 ACCOUNTING	 NEW YORK
	   20 RESEARCH	   DALLAS
	   30 SALES		  CHICAGO
	   40 OPERATIONS	 BOSTON
	   50 Finance			Amman





طيب في حالة اريد ان اضيف اسماء اقسام جديدة

وكلها موجودة في موقع واحد ولا اريد ان اكرر في كل مرة اسم الموقع

الموضوع بسيط جدا جدا جدا في الدرس القادم مع تكلمة الشرح لموضوع الـــ Procedure


الحل بسيط جدااا نكتب بعد تعريف الحقل =: ونكتب بعدها القيمة التي نريد او نكتب كلمة Default كالتالي

QL> create or replace procedure insert_dept (p_dname in dept.dname%type,p_loc in dept.loc%type:='Amman')
  2  is
  3  v_deptno number;
  4  begin
  5  select max(deptno)
  6  into v_deptno
  7  from dept;
  8  v_deptno:=v_deptno+10;
  9  insert into dept
10  values(v_deptno,p_dname,p_loc);
11  commit;
12* end;
SQL> /

Procedure created.


أو بأستخدام كلمة Default

SQL> create or replace procedure insert_dept (p_dname in dept.dname%type,p_loc in dept.loc%type Default 'Amman')
  2  is
  3  v_deptno number;
  4  begin
  5  select max(deptno)
  6  into v_deptno
  7  from dept;
  8  v_deptno:=v_deptno+10;
  9  insert into dept
10  values(v_deptno,p_dname,p_loc);
11  commit;
12* end;
SQL> /

Procedure created.

طريقة الاستدعاء

SQL> begin
  2  insert_dept('Tax');
  3  end;
  4  /

PL/SQL procedure successfully completed.

قمنا فقط بأدخال اسم القسم ولم ندخل اسم الموقع لانه يوجد قيمة له وهي Amman


ولتأكد من انه اضاف البيانات الجديدة


SQL> select *
  2  from dept;
DEPTNO DNAME		  LOC
--------- -------------- -------------
	   10 ACCOUNTING	 NEW YORK
	   20 RESEARCH	   DALLAS
	   30 SALES		  CHICAGO
	   40 OPERATIONS	 BOSTON
	   50 Finance		Amman
	   60 Tax			Amman


طيب اذا اردنا ان نثبت اسم القسم في اكثر من منطقة ماذا العمل .

على سبيل المثال اربد ان اضع قسم الضريبة في اكثر من منطقة .

والحل كالأتي .


SQL> create or replace procedure insert_dept (p_dname in dept.dname%type :='Tax' ,p_loc in dept.loc%type)
  2  is
  3  v_deptno number;
  4  begin
  5  select max(deptno)
  6  into v_deptno
  7  from dept;
  8  v_deptno:=v_deptno+10;
  9  insert into dept
10  values(v_deptno,p_dname,p_loc);
11  commit;
12* end;
SQL> /

Procedure created

وطريقة الاستدعاء في هذه الحالة تختلف شيئ بسيط كالتالي

عند استدعاء الـــ Procedure القيمة الاولى معروفة وموجودة وهي اسم القسم

ولا داعي لوضع قيمة لها اما القيمة الثانية وهي اسم الموقع غير موجودة لذلك نضع القيمة لها

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

وتتم عملية القفز بوضع أشارة <= قبل القيمة التي نريد أدخالها كالتالي .



SQL> begin
  2  insert_dept(P_Loc=>'Irbid');
  3  end;
  4  /

PL/SQL procedure successfully completed.

في هذه الحالة يأخذ القيمة للأسم القسم ويقفز ويأخذ قيمة أسم الموقع .

ولتأكد من انه اضاف البيانات الجديدة



SQL> select *
  2  from dept;
DEPTNO DNAME		  LOC
--------- -------------- -------------
	   10 ACCOUNTING	 NEW YORK
	   20 RESEARCH	   DALLAS
	   30 SALES		  CHICAGO
	   40 OPERATIONS	 BOSTON
	   50 Finance		Amman
	   60 Tax			Amman
	   70 Tax			Irbid

سأكرر العملية اكثر من مرة وسأقوم كل مرة بأضافة جديدة
SQL> begin
  2  insert_dept(P_Loc=>'Salt');
  3  end;
  4  /

PL/SQL procedure successfully completed.


ومرة اخرى أقوم بأضافة



SQL> begin
  2  insert_dept(P_Loc=>'Zarqa');
  3  end;
  4  /

PL/SQL procedure successfully completed.

ولتأكد من انه اضاف البيانات الجديدة



SQL> select *
  2  from dept;
DEPTNO DNAME		  LOC
--------- -------------- -------------
	   10 ACCOUNTING	 NEW YORK
	   20 RESEARCH	   DALLAS
	   30 SALES		  CHICAGO
	   40 OPERATIONS	 BOSTON
	   50 Finance		Amman
	   60 Tax			Amman
	   70 Tax			Irbid
	   80 Tax			Salt
	   90 Tax			Zarqa

طيب اريد ان اعمل اضافة مرة اخرى لنرى ماذا يحصل



SQL> begin
  2  insert_dept(P_Loc=>'Mafraq');
  3  end;
  4  /
begin
*
ERROR at line 1:
ORA-01438: value larger than specified precision allows for this column
ORA-06512: at "SCOTT.INSERT_DEPT", line 9
ORA-06512: at line 2

ما هذا الخطأ ...!!! طيب انا عندي سؤالين ...!!!

لماذا هذا الـــError ...؟

هل المستخدم العادي سيفهم هذا الخطأ ...؟

سأجيب على السؤالين بنفسي.

احابة السؤال الاول هذا الخطأ ظهر بسب رقم القسم وصل لغاية الرقم 90

واذا اضافنا كمان قسم سيصبح الرقم 100 وهذا لا يجوز لانه عند تعريف رقم القسم

عرفناه number(2) لنرى مواصفات هذه الجدول .



SQL> Desc Dept;
 Name							Null?	Type
 ------------------------------- -------- ----
 DEPTNO						  NOT NULL NUMBER(2)
 DNAME									VARCHAR2(14)
 LOC									  VARCHAR2(13)

والاجابة على السؤال الثاني

هي لأ طبعا المستخدم العادي لا يعرف معنى هذا الــ Error

طيب ما العمل

بسيطة اقوم بالتعديل على الــ Procedure بحيث اذا قام المستخدم العادي

بأضافة اقسام اكثر من الرقم المحدد نخرج من الـــ Procedure ونعطيه رسالة

واضحة بانه لا يصح اضافة اقسام جديدة كالتالي .




SQL> ed
Wrote file afiedt.buf

  1  create or replace procedure insert_dept (p_dname in dept.dname%type :='Tax' ,p_loc in dept.loc%
  2	   is
  3	   v_deptno number;
  4	   begin
  5	   select max(deptno)
  6	   into v_deptno
  7	   from dept;
  8	   v_deptno:=v_deptno+10;
  9	 if v_deptno > 90 then
 10	 raise_application_error(-20100,'You Can Not Insert More Department ...');
 11	 else
 12	  insert into dept
 13	values(v_deptno,p_dname,p_loc);
 14  end if;
 15	commit;
 16*   end;
SQL> /

لنحاول الاضافة مرة أخرى



SQL> begin
  2  insert_dept(P_Loc=>'Mafraq');
  3  end;
  4  /
begin
*
ERROR at line 1:
ORA-20100: You Can Not Insert More Department ...
ORA-06512: at "SCOTT.INSERT_DEPT", line 10
ORA-06512: at line 2line 2

طيب يوجد لدينا امر جديد وهو




raise_application_error(-20100,'Write Message Reason Exit ...');


هذا الامر يتعبر من الــ Exception اذا يقوم بالخروج من البرنامج مع اعطاء رسالة بسبب الخروج

هذا الامر جاهز من اوراكل يكتب بطريقة السابقة مع تغير صيغة الرسالة بحيث تناسب كل حالة

اذا raise_application_error جاهزة لا يغير فيها اي شي

-20100 وهذا الرقم نكتب بمدى معين وهو -20000 الى 29999

ونكتب بين هذا الرمز ' ' الرسالة التي نريد


طيب في حالة اريد ان ارى الــProcedure التي قمت بأنشائها من قبل والعمل على التعديل عليها

او القيام بحذفها ما هي الاوامر التي استطيع من خلالها القيام بهذه الامور .

الموضوع بسيط جداً جداً جداً في الدرس القادم

اللهم أغفر للمسلمين والمسلمات والمؤمينين والمؤمينات ألاحياء منهم وألاموات الى يوم الدين


موضوع قرأتة فأعجبني
http://www.shbab1.com/2minutes.htm

اذا عجبك موضوع من مواضيعي..لا تقل لي شكراً
و لكن أدعو لي (في ظهر الغيب) بالآتي

اللهم اغفر له ما تقدم من ذنبه و ما تأخر..اللهم احسن خاتمته
اللهم اغفر لوالديه و ارحمهما و ادخلهما جناتك برحمتك يا أرحم الراحمين و لكم بالمثل ان شاء الله
ارجو من الله ان يكون ما انقله لكم من ضمن حسناتى
 356663087.jpg

 

لا تأســــفنَّ عـلى غــــــدرِ الزمــانِ لطالــمـا

رقصـــــــت على جثــــثِ الأســــــــودِ كلابا

لا تحسبن برقصـــــها تعلوا على أســــيادها
تبقى الأســــودُ أسوداً والكـــــلابُ كِــــــلابا


#59 miash80

miash80

    عضو مميز

  • الأعضــاء
  • 793 مشاركة
  • الاسم الأول:mousa
  • اسم العائلة:hamdallah
  • البـلـد: Country Flag
  • الاهتمامات:Read
  • المنصب الحالي:Analyst Assistant

تاريخ المشاركة 16 January 2010 - 06:40 PM

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

في الدرس السابق تكلمنا عن الاوامر الخاصة بالـــProcedure

هذه الجمل نستخدمها لاخراج أسماء الــTable والــProcedure والـــFunction والــTrigger والــPackage


وهي هذه الجمل


SELECT *
FROM all_errors;

SELECT *
FROM all_source;

SELECT *
FROM user_objects;

SELECT *
FROM dba_errors;

SELECT *
FROM dba_object_size;

SELECT *
FROM dba_source;

SELECT
FROM user_errors;

SELECT *
FROM user_source;

SELECT *
FROM user_object_size;



ومن خلال هذه الجمل نستطيع وضع شروط لاخراج بيانات معينة مثل تحديد نوع البيانات مثل اريد اسماء الــProcedure فقط كالتالي

SELECT *
FROM user_source
where type='PROCEDURE';

او اسماء الــFunction

SELECT *
FROM user_source
where type='FUNCTION';


بنفس الطريقة الــTrigger و الــــPackage


واستطيع ان اضع شرط اسم الــProcedure


SELECT *
FROM user_source
where type='PROCEDURE'
and  name='insert_dept';

واستطيع ان اضع شرط اسم اليوزر اذا دخلت من خلال يوزر الــSystem

SELECT *
FROM dba_source
WHERE OWNER='SCOTT';

وهكذا


ومن خلال هذه الجمل استطيع التعديل على الــProcedure

من خلال الحقل Text بحيث اخذ نسخة من الــProcedure وأقوم بالتعديل عليه

وهذا الحقل موجود في معظم الجداول السابقة


والجداول هي


all_errors;

 all_source;

 dba_errors;

 dba_source;

 user_errors;

 user_source;


اما الامر الخاص بعملية حذف الـــProcedure هو

DROP PROCEDURE PROCEDURE_NAME;


مثال


SQL> DROP PROCEDURE INSERT_DEPT;

Procedure dropped.

في الدرس القادم إن شاء الله اذا لم يكن هنالك اسئلة سنتحدث عن ابن عم الــــProcedure

اتعرفون من هو ابن عم الــProcedure أنه الــFunction :unsure: :( :(

لهم صفات مشتركة ولهم صفات مختلفة

لنرى في الدرس القادم هذه الصفات إن شاء الله


  • cassanova معجب بهذا

اللهم أغفر للمسلمين والمسلمات والمؤمينين والمؤمينات ألاحياء منهم وألاموات الى يوم الدين


موضوع قرأتة فأعجبني
http://www.shbab1.com/2minutes.htm

اذا عجبك موضوع من مواضيعي..لا تقل لي شكراً
و لكن أدعو لي (في ظهر الغيب) بالآتي

اللهم اغفر له ما تقدم من ذنبه و ما تأخر..اللهم احسن خاتمته
اللهم اغفر لوالديه و ارحمهما و ادخلهما جناتك برحمتك يا أرحم الراحمين و لكم بالمثل ان شاء الله
ارجو من الله ان يكون ما انقله لكم من ضمن حسناتى
 356663087.jpg

 

لا تأســــفنَّ عـلى غــــــدرِ الزمــانِ لطالــمـا

رقصـــــــت على جثــــثِ الأســــــــودِ كلابا

لا تحسبن برقصـــــها تعلوا على أســــيادها
تبقى الأســــودُ أسوداً والكـــــلابُ كِــــــلابا


#60 a12345

a12345

    عضو

  • الأعضــاء
  • 1 مشاركة

تاريخ المشاركة 17 January 2010 - 08:53 PM

بارك الله فيك