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

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


khaledmega

Recommended Posts

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



خالد :- اولا السلام عليكم ؛ كنا اخر فتفوتة وقفنا فيها عند عملية الدمج ؛ النهاردة
– اليوم – هناخد ان شاء الله فتفوتة جديدة وهي
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
[email protected] 
[email protected][/center]

تم تعديل بواسطة khaledmega
رابط هذا التعليق
شارك

  • بعد 3 سنة...

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

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

رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

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

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