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

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

صورة
- - - - -

فتــافيـت - الفتفوتة الرابعــــة


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

#1 khaledmega

khaledmega

    عضو مميز

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

تاريخ المشاركة 05 October 2009 - 07:10 PM

الفتـفوتـة الرابعــة



خالد :- اولا السلام عليكم ؛ كنا اخر فتفوتة وقفنا فيها عند عملية الدمج ؛ النهاردة
– اليوم – هناخد ان شاء الله فتفوتة جديدة وهي
NVL – NVL2
وهي تعني " القيم الخالية " ؛ والقيم الخالية معناها ان الحقل فارغ من اى قيمة ولازم تفرق بين ان الحقل لا يحتوى على قيمة وان الحقل به قيمة تساوى صفر
طالب :- يعنى ايه ؟
خالد :- الحقل الخالي هو فارغ من اى قيمة وكأنه فيه هواء او لا شيء او مجهول ؛ اما الصفر فهو قيمة لها معنى فى الداتا بيز ؛ يستطيع الاوراكل التعامل معها ؛ تعالي ناخد مثال على الحالتين علشان تفهم اكتر
طالب :- يا ريت
خالد :- احنا قلنا ان القيمة الخالية كأننا بنقول " لا شيء او مجهول " طب لو انا قلتلك
لاشئ * 5 = ايه ؟
طالب:- لاشيئ
خالد :- طيب مجهول + 10 = ايه ؟
طالب :- اكيد مجهول
خالد :- لكن لو قلتلك مثلا
0 * 5 = ايه ؟
طالب :- صفر
خالد :- طيب 0 + 10 = ايه ؟
طالب :- 10
خالد :- تقريبا كده وضح الفرق بين التعامل مع القيم الخالية والصفر ؛ طيب مخاطر التعامل مع القيم الخالية ايه ؟
طالب :- هي ليها مخاطر ؟
خالد :- طبعا ؛ اولا تعالي نفهم الية تعامل الاوراكل مع القيم الخالية ؛ الاوراكل لما NULL بيلاقى القيم الخالية بيحط – بيضع – بشكل تلقائي كلمة
وكانه وضع كلمة مجهول ؛ بمعني لو انك حبيت تعمل عملية جمع لاختبار التعامل مع القيم الخالية ؛ تعالي نشوفها بشكل عملي

SELECT 5 +   + 10 FROM DUAL ;
5++10
----------
15

الاوراكل هنا قام بعملية الجمع رغم وجود فراغ والسبب ان الفراغ لم يأتي من حقل فلو لاحظت ستجد انى كتبت

5 +   + 10


الفراغ هنا ليس بحقل لان الخمسة و العشرة هي ايضا لم تأتي من حقول انما موضوعة باليد
طالب :- عايز تقول ايه ؟
خالد :- عايز اقول انا الاوراكل لو بيجيب – يسترجع – بيانات من جدول هيكون NULLالامر مختلف !!! لانه هيحول القيمة الفارغة الى كلمة
تعالي نشوف


SELECT 5 + NULL + 10 FROM DUAL  ;
5+NULL+10
----------

هي دي الية الاوراكل فى التعامل مع البيانات المرتجعة ؛ انه بيحول القيم الفارغة الي NULL ؛ فمثلا جدول EMP هناك حقل المرتب وحقل العمولة تعالي نشوف هيتعامل معاهم ازاى

SQL> SELECT ENAME ,  SAL , COMM , SAL + COMM FROM EMP ; 

ENAME SAL COMM SAL+COMM
---------- ---------- ---------- ----------
SMITH 800
ALLEN 1600 300 1900
WARD 1250 500 1750
JONES 2975
MARTIN 1250 1400 2650
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
TURNER 1500 0 1500
ADAMS 1100

ENAME SAL COMM SAL+COMM
---------- ---------- ---------- ----------
JAMES 950
FORD 3000
MILLER 1300

14 rows selected.


اللي حصل ان الاوراكل بدء يعرض الحقول المطلوب عرضها زى الاسم والمرتب والعمولة وكمان جمع المرتب + العمولة ؛ لكن لما بدء يجمع هنلاقى ان النتيجة لبعض الموظفين المسجلين خالية كالتالي :-

ENAME             SAL       COMM   SAL+COMM
---------- ---------- ---------- ----------
SMITH 800
ALLEN 1600 300 1900
WARD 1250 500 1750
JONES 2975



عندك مثلا سميث وجونز موظفين ولهم رواتب لكن ليس لهم عمولة فهم ليسوا مدرجين ضن الناس التى تأخذ عمولة فكان نتيجة جمع المرتب والعمولة كانت خالية ؛ اذا اخر الشهر ليس هناك رواتب لهم ؛ ودى كارثة فى حسابات الشركة ؛ اللي حصل ان البيانات او القيم المرتجعة من حقل العمولة كانت فارغة من اى قيم وبالتالي عند عملية الجمع بدء يجمع المرتب + قيم خالية " مجهول "
كانت النتيجة = مجهول او بلغة الاوراكل NULL !!
قد يتصور البعض ان الامر بسيط ؛ لكن فى حقيقة الامر انه ليس ببسيط على الطلاق ؛ فقد ينتج خطئ فى المستندات الحسابية للشركة اذا ما اغفلنا هذا الامر .
طالب :- طب ايه قواعد التعامل مع القيم الخالية ؟
خالد :- جميل ؛
اولا:- تستخدم NVL فقط لتحويل القيم الفارغة الي قيم فعلية يستطيع الاوراكل التعامل معها .
ثانيا :- لا يوجد مشكلة فى تعامل NVL سيان مع الحروف او الارقام او التاريخ .
ثالثا :- هناك نوعان وهم NVL / NVL2 ولكلا منهم هدف وطريقة مختلفة فى الاداء .
طالب :- واحدة واحدة بعد اذنك .
خالد :- تعالي نشوف اول حاجة ؛ امتى بحتاج لل NVL ؟
بحتاج لها فى حالتين الاولى مع العمليات الحسابية وده علشان اظبط ميزانية اى عملية حسابية ؛ ولو انت متوقع انه يحصل تسجيل بيانات فارغة من المستخدم يجب انك تجهز البرنامج بتاعك لمثل هذه الاخطاء ؛ فالديفولبر ليس مصمم ومبرمج فقط ؛ انما يجب ان يتوفر فيه تحقيق رغبات العميل وتوقع الاخطاء وتفاديها والا لن تلاقي النجاح ابدا .
طالب :- اسف ؛ يعني ايه " قيم فعلية يستطيع الاوراكل التعامل معها " ؟ .
خالد :- اى حرف او رقم فهو قيمة فعلية ؛ ايا كان لغة الحرف وايا كان قيمة الرقم حتى لو صفر فهو فى النهاية قيمة يمكن للاوراكل التعامل معها .
تعالي نكتب الكود بأيدينا ؛ لو عندك حقل سيان انت متأكد ان فيه قيم خالية او متوقع ان يوضع به قيم خالية ؛ وانت عايز تخلي الاوراكل يحسب صح لازم تضع قبل الحقل الذى يحتوي على قيم خالية NVL


NVL(COLUMN_NAME) 
SELECT COMM , NVL(COMM , 0) FROM EMP ;
NVL(COMM , 0) , COMM
---------- ----------
0
300 300
500 500
0
1400 1400
0
0
0
0
0 0
0

NVL(COMM , 0) , COMM
---------- -----------
0
0
0
14 rows selected.


الاوراكل لما بيشوف انك كاتب NVL قبل اى حقل هو تلقائيا بيشيل – بيبدل – القيم الخالية المجهولة ويضع القيمة اللى انت كاتبها ايا كانت ؛ لكن ده مش معناه انه بيحفظ القيمة الجديدة فى الداتا بيز ولكن هي للعرض فقط .
طالب :- طيب وال NVL2 ؟
خالد :- دي بتشتغل على معاملين ؛ بمعني ان NVL بتشتغل فقط على القيم الخالية انما NVL2 بتشتغل على القيم الخالية وعلى القيم الفعلية ؛ تعالي نشوف

SELECT COMM , NVL2(COMM , 10 , 5) FROM EMP ;
NVL2(COMM , 0) , COMM
---------- ----------
5
300 10
500 01
5
1400 10
5
5
5
5
0 10
5

NVL2(COMM ,10 , 5) , COMM
---------- -----------
0
0
0
14 rows selected.


الاوراكل لما بيشوف NVL2 قبل اى حقل كانك بتقوله ادخل على الحقل اذا لاقيت فيه قيمة حولها لكذا واذا لم تجد قيمة – خالي يعني – حولها لكذا
تمام ؟
الطالب :- الى حدا ما !!
خالد :- تعالي نشوف فتفوتة جديدة اسمها Distinct :-
الديستنكت ببساطة هي تستخدم لعدم تكرار القيم ؛ لو انا عندي كشف بأسماء سكان مصر ومحافظتهم مثلا ؛ هذا يعني ان كل اسم مواطن بجواره المحافظة التى ينتمي اليها ؛ واذا كان عدد سكان مصر 80 مليون مواطن فهذا يعني ان الكشف به 80 مليون اسم وكذلك 80 مليون محافظة بجوار كل اسم ؛ لكن هل فعلا مصر تحتوى على 80 مليون محافظة ؟
طالب :- لا طبعا !!
خالد :- اذا انا عندي 80 مليون اسم لاشخاص مختلفين بالفعل ولكن عندي تكرار لا حصر له للمحافظات ؛ هنا بيظهر فايدة الديستنكت ؛ فلو انت عايز تعرف العدد الاصلي للمحافظات بدون تكرار هنا بنستخدم ديستنكت ؛ نفس الامر هتلاقيه فى جدول EMP عندك اسماء موظفين مختلفين فعليا ؛ وكل موظف ينتمي لأدارة ولكن هناك تكرار للادارات كالتالي :-

SELECT ENAME , DEPTNO FROM EMP ;
ENAME DEPTNO
---------- ----------
SMITH 20
ALLEN 30
WARD 30
JONES 20
MARTIN 30
BLAKE 30
CLARK 10
SCOTT 20
KING 10
TURNER 30
ADAMS 20

ENAME DEPTNO
---------- ----------
JAMES 30
FORD 20
MILLER 10


لالغاء هذا التكرار بنستخدم Distinct ؛ ولكن بشكل منفرد على الحقل الذى تريد ان تلغي فيه التكرار كالتالي :-

SELECT DISTINCT DEPTNO FROM EMP ;
DEPTNO
------
30
20
10

تمام !!
طالب :- تماااااام !!


[center]م / خالد الشاذلي
مبرمج اوراكل بوزارة الانتاج الحربي
IT Manager 1Solution Group
0122512071
khaled.elshazly@1solution.org
eng-mega@hotmail.com[/center]

تم التعديل بواسطة khaledmega, 05 October 2009 - 07:13 PM.

  • mohamed.ramadan معجب بهذا

من أهـم مواضــيعي :



نفسك تسطب اوراكل 10g وبالصور وتربط بين الداتابيز والديفولبر ؟


للأستفسار عن أى شيء يخص الأوراكل أبس أو اوراكل ديفولبر راسلنى على

e
ng-mega@hotmail.com

 

Oracle Apps Techno-Functional Consultant


Oracle Developer & Instructor

 

Instructor At Next Academy

 

محاضر معتمد لدي نكست أكاديمي

OCA - OCP

م / خالد الشاذلي


#2 abdbzour

abdbzour

    عضو

  • الأعضــاء
  • 2 مشاركة
  • الاسم الأول:Abd Al-Rahmman
  • اسم العائلة:Al-Bzour
  • البـلـد: Country Flag
  • الاهتمامات::)
  • المنصب الحالي:Oracle Developer

تاريخ المشاركة 03 August 2013 - 05:21 AM

مشكور جدً أخي بارك الله فيك

موضوعك رائع جداً في المحتوى وطريقة العرض حيث أن المعلومة رسغت في ذهني بشكل ممتاز بارك الله فيك