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

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

صورة
- - - - -

سؤال فى الpackage


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

#1 abd l rahman

abd l rahman

    مشترك

  • الأعضــاء
  • 132 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 01 July 2006 - 10:58 AM

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

عندى سؤال فى ال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   890بايت   44 عدد مرات التحميل

تم التعديل بواسطة abd l rahman, 02 July 2006 - 09:08 PM.


#2 هانى سند

هانى سند

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 743 مشاركة

تاريخ المشاركة 01 July 2006 - 12:27 PM

السلام عليكم
أخي الكريم

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 اي لايمكن استخدامها خارج الباكيدج و انما داخلها فقط

اتمني ان تكون الرؤية واضحة الان
و اذا كان لا يوجد شئ غير واضح بعد فارجو توضيح الجزء الغير مفهوم حتي استطيع توضيحه بإذن الله
بالتوفيق

تم التعديل بواسطة hanon_OCP, 01 July 2006 - 12:39 PM.


#3 abd l rahman

abd l rahman

    مشترك

  • الأعضــاء
  • 132 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 01 July 2006 - 03:00 PM

السلام عليكم و رحمة الله و بركاته
جزاك الله خيرا على الشرح الرائع يا hanon
بصراحة مجهود مذهل لا اعرف ماذا اقول لك
يوجد شئ صغير جدا اريد ان افهمه وهو
IF validate(new_comm)
ما المقصود بها هل المقصود انه اذا كانت الفانكشن validate تساوى new_comm اجعل الجلوبال فاريابل بنفس القيمة الموجوده بnew_comm
لانى لا ارى الشرط فى الIF ما معنى
IF validate(new_comm)
و ارجو ان لا اكون ثقيل
و جزاك الله خيرا مره اخرى يا اخى الكريم

تم التعديل بواسطة abd l rahman, 01 July 2006 - 04:05 PM.


#4 m_dba

m_dba

    عضو نشط

  • الأعضــاء
  • 238 مشاركة
  • الاسم الأول:Ahmad
  • اسم العائلة:Zaki
  • البـلـد: Country Flag

تاريخ المشاركة 02 July 2006 - 07:39 AM

يعني اذا كان الفنكشن الي اسمو فاليديت صحيح برجع قيمة العمولة الجديدة بين الصفر وبين اقصى عمولة (بمعنى ذلك ان الشرط يتحقق ) ويقوم بتنفيذ باقي الجمل يعني يسند قيمة العمولة الجديدة العمولة العامة وتصبح عمولة ستاندارد

اما اذا كان الفانكشن الي اسمو فالديت خاطئ فتصبح عمولة غير مقبولة ارجو ان يكون اتضح الامر لك يا اخي
امسح ذنوبك في دقيقتين - بس دقيقتين وشوف

http://www.shbab1.com/2minutes.htm

#5 abd l rahman

abd l rahman

    مشترك

  • الأعضــاء
  • 132 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 03 July 2006 - 04:07 AM

جزاك الله خيرا يا اخ m_dba
اللى فهمته ان الفنكشن validate بترجع boolean فاذا كان ال new_comm بين ال0 و اعلى قيمة نفذ باقى الstatement و اذا كان خطأ اعمل اكسبشن

#6 m_dba

m_dba

    عضو نشط

  • الأعضــاء
  • 238 مشاركة
  • الاسم الأول:Ahmad
  • اسم العائلة:Zaki
  • البـلـد: Country Flag

تاريخ المشاركة 03 July 2006 - 07:45 AM

FUNCTION validate(comm NUMBER) RETURN BOOLEAN IS
لاحظ آخر السطر من الفنكشن شو بتفهم منو returm boolean يعني اكيد بدو يرجع بوليان
في انواع من الفنكشن بتكون مكتوبة rturn varchar او return number
امسح ذنوبك في دقيقتين - بس دقيقتين وشوف

http://www.shbab1.com/2minutes.htm

#7 هانى سند

هانى سند

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 743 مشاركة

تاريخ المشاركة 03 July 2006 - 12:52 PM

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