الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

سؤال فى الpackage

Featured Replies

بتاريخ:

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

عندى سؤال فى ال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

تم تعديل بواسطة abd l rahman

بتاريخ:

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

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

بتاريخ:
  • كاتب الموضوع

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

IF validate(new_comm)


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

IF validate(new_comm)


و ارجو ان لا اكون ثقيل
و جزاك الله خيرا مره اخرى يا اخى الكريم

تم تعديل بواسطة abd l rahman

بتاريخ:

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

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

بتاريخ:
  • كاتب الموضوع

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

بتاريخ:

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

بتاريخ:

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

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.