بتاريخ: 1 يوليو 200619 سنة comment_73495 السلام عليكم و رحمة الله و بركلتهعندى سؤال فى الpackage محيرنى جداهو فى الحقيقة مثال فى كتاب الاوركال يونيفرسيتى بس صعب جدا لا اقدر على فهمهالمثال هو: Package Specification CREATE OR REPLACE PACKAGE comm_pkg IS std_comm NUMBER := 0.10; --initialized to 0.10 PROCEDURE reset_comm(new_comm NUMBER); END comm_pkg; Package Body CREATE OR REPLACE PACKAGE BODY comm_pkg IS FUNCTION validate(comm NUMBER) RETURN BOOLEAN IS max_comm employees.commission_pct%type; BEGIN SELECT MAX(commission_pct) INTO max_comm FROM employees; RETURN (comm BETWEEN 0.0 AND max_comm); END validate; PROCEDURE reset_comm (new_comm NUMBER) IS BEGIN IF validate(new_comm) THEN std_comm := new_comm; -- reset public var ELSE RAISE_APPLICATION_ERROR( -20210, 'Bad Commission'); END IF; END reset_comm; END comm_pkg; و المثال موجود فى المرفقات ايضا لمن يريدهأرجو من اصحاب الخبرة شرح هذا المثال لانى لا استطيع فهمه و جزاكم الله خيرا PKG.txt تم تعديل 2 يوليو 200619 سنة بواسطة abd l rahman تقديم بلاغ
بتاريخ: 1 يوليو 200619 سنة comment_73505 السلام عليكم أخي الكريم CREATE OR REPLACE PACKAGE comm_pkg IS std_comm NUMBER := 0.10; --initialized to 0.10 PROCEDURE reset_comm(new_comm NUMBER); END comm_pkg; هذا الجزء من المثال يشرح كيفية تعريف باكيدج عي الداتا بيز و الباكيدج تتكون من جزئين 1-Package Specificationو هو اجباري اي لابد من وجوده و فيه تعريف للمتغيرات العامة او global variables و التي يمكن استخدامها في كل الباكيدج و ايضا فيه تعريف الfunctions and procedures من حيث البارمترز و نوع الreturn 2-و الجزء الثاني هو Package Body و هو اختياري اي يمكن وجوده او عدم وجوده فلو كانت الباكيدج عبارة عن متغيرات فقط فلن نحتاجه و لكن لو كانت تحتوي علي اي function or procedure فلابد من وجوده نري في المثال باكيدج اسمها comm_pkgفيها فارببل اسمه std_comm و نعطيه قيمة افتراضية ب 0.10و يوجد ايضا تعريف بروسيدر اسمها reset_commو هي عبارة عن بروسيدر تقوم بتغغير قيمة الجلوبال فاريبل std_comm طبقا لشروط معينة سنراها في Package Body CREATE OR REPLACE PACKAGE BODY comm_pkg IS FUNCTION validate(comm NUMBER) RETURN BOOLEAN IS max_comm employees.commission_pct%type; BEGIN SELECT MAX(commission_pct) INTO max_comm FROM employees; RETURN (comm BETWEEN 0.0 AND max_comm); END validate; PROCEDURE reset_comm (new_comm NUMBER) IS BEGIN IF validate(new_comm) THEN std_comm := new_comm; -- reset public var ELSE RAISE_APPLICATION_ERROR( -20210, 'Bad Commission'); END IF; END reset_comm; END comm_pkg; في جسم الحزمة هذا نقوم بكتابة كود الاجراء او البروسيدر و نري بعد كلمة is انه يوجد تعريف لفانشكن اسمها validateهذه الفانشكن تقوم بالتحقق من الشروط التي تحدثت عنها اذا تقوم هذه الفانشكن بعمل سيليكت لاقصي عمولة يأخذها موظف و هي تأخذ in parameter و هي عبارة عن قيمة العمولة الجديدة التي نريد تغيرها و تقوم بارجاع boolean اي true or false و معني هذه الجملة RETURN (comm BETWEEN 0.0 AND max_comm); انه اذا كان العمولة الجديدة بين الصفر و اقصي عمولة لموظف و الذي اخترناه في جملة السيلكيت التي تسبق ذلك الشرط فان الفانكشن هترجع trueاما اذا كانت اكبر او اقل من الصفر فهترجع falseبعذ ذلك نري البروسيدر الرئيسية تقوم بعمل فحص قيمة العمولة الجديدة عن طريق هذه الفانكشن فاذا كانت مطابقة للشروط و هي ان تكون بين الصفر و اعلي عمولة لموظف فستقوم بتغيير قيمة std_comm و هو الجلوبال فاريبل في الباكيدج الي قيمته الجديدة غير ذلك ستقوم بإظهار رسالة خطأجدير بالذكر ان هذه الفانكشن هي عبارة عن private function اي لايمكن استخدامها خارج الباكيدج و انما داخلها فقط اتمني ان تكون الرؤية واضحة الان و اذا كان لا يوجد شئ غير واضح بعد فارجو توضيح الجزء الغير مفهوم حتي استطيع توضيحه بإذن الله بالتوفيق تم تعديل 1 يوليو 200619 سنة بواسطة hanon_OCP تقديم بلاغ
بتاريخ: 1 يوليو 200619 سنة كاتب الموضوع comment_73516 السلام عليكم و رحمة الله و بركاتهجزاك الله خيرا على الشرح الرائع يا hanonبصراحة مجهود مذهل لا اعرف ماذا اقول لكيوجد شئ صغير جدا اريد ان افهمه وهو IF validate(new_comm) ما المقصود بها هل المقصود انه اذا كانت الفانكشن validate تساوى new_comm اجعل الجلوبال فاريابل بنفس القيمة الموجوده بnew_commلانى لا ارى الشرط فى الIF ما معنى IF validate(new_comm) و ارجو ان لا اكون ثقيلو جزاك الله خيرا مره اخرى يا اخى الكريم تم تعديل 1 يوليو 200619 سنة بواسطة abd l rahman تقديم بلاغ
بتاريخ: 2 يوليو 200619 سنة comment_73546 يعني اذا كان الفنكشن الي اسمو فاليديت صحيح برجع قيمة العمولة الجديدة بين الصفر وبين اقصى عمولة (بمعنى ذلك ان الشرط يتحقق ) ويقوم بتنفيذ باقي الجمل يعني يسند قيمة العمولة الجديدة العمولة العامة وتصبح عمولة ستاندارد اما اذا كان الفانكشن الي اسمو فالديت خاطئ فتصبح عمولة غير مقبولة ارجو ان يكون اتضح الامر لك يا اخي تقديم بلاغ
بتاريخ: 3 يوليو 200619 سنة كاتب الموضوع comment_73616 جزاك الله خيرا يا اخ m_dbaاللى فهمته ان الفنكشن validate بترجع boolean فاذا كان ال new_comm بين ال0 و اعلى قيمة نفذ باقى الstatement و اذا كان خطأ اعمل اكسبشن تقديم بلاغ
بتاريخ: 3 يوليو 200619 سنة comment_73619 FUNCTION validate(comm NUMBER) RETURN BOOLEAN ISلاحظ آخر السطر من الفنكشن شو بتفهم منو returm boolean يعني اكيد بدو يرجع بوليان في انواع من الفنكشن بتكون مكتوبة rturn varchar او return number تقديم بلاغ
بتاريخ: 3 يوليو 200619 سنة comment_73644 السلام عليكم كما أوضح الاخ m_dbaالفانشكن validate return true or false و معني جملة if validate(new_comm)لتفهمها جيدا فلابد ان نعرف كيف يتم التعامل مع ال if statment and boolean variables or functionsمن المنطق اللغوي اذا استعملنا if في حالة الاثبات اي if validate معناه انه تم تحقق الشرط و الفانكشن رجعت true اما اذا استعملناها في حالة النفي اي if not validateفمعناها ان الشرط لم يتحقق اي الفانشكن رجعت false و لذلك فمعني if validate (new_comm) ان العمولة الجديدة مطابقة للشروط التي عرفناها ارجو ان تكون اوضح الان بالتوفيق تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.