صفحة 4 من 12 الأولىالأولى 123456789 ... الأخيرةالأخيرة
النتائج 46 إلى 60 من 169

الموضوع: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

  1. #46
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    قبل ان ينتهي هذا الدرس ..

    اريد ان تشاهد الصورة التالية ... وهي تلخيص للمعاملات بشكل سلس وبشكل مفهوم لك لكي لا تنساها .. احتفظ بها .. فهي مفيدة كثيرا !! صدقني (الصورة 57)





    انتهى الدرس السابع ...

    اليك المهام :

    - جهز برنامج الاوراكل .. سوف اشرح جزء من تنزيله .... وسأفكر في شرحه كله ... اذا استطعت

    - اقرأ الموضوع هذا اكثر من مرة .. واذا كنت تملك برنامج الاوراكل .. طبق ... ولا شيء غير التطبيق ...

    اليك التحديات :

    ستجد التحديات التالية بين السطور ... وهي :

    التحدي الأول :

    أريد عرض كل أسماء الموظفين التي تحتوي على حرف الـ
    T مرتين .. يعني لو أن احدهم يدعى بـ SCOTT فسوف يعرض ... فهو اسم يحتوي على الحرف T مرتين ..

    ولو ان احدهم يدعى
    TRRRRRRRRT فسوف يعرض أيضا لأنه يحتوي على الحرف T مرتين وهكذا ,,,,,,


    التحدي الثاني :

    ما الناتج من العمليات التالية ؟

    صح و صح و صح و صح و خطأ = ؟؟؟

    خطأ أو صح أو خطأ أو صح = ؟؟؟

    نفي نفي نفي نفي نفي الخطأ = ؟؟؟


    التحدي الثالث :

    اريد عرض اسماء ورواتب الموظفين الذين راتبهم اكبر من 1000 واقل من 5000 بدون استخدام
    Between



    التحدي الرابع :

    اريد عرض اسماء ورواتب الموظفين الذين اسمائهم
    KING أو SCOTT أو TIGER بدون استخدام IN



    التحدي الخامس :

    هل تشاهد الصورة 47 ؟؟ وهي ثلاث شروط ... برأيك مالناتج اذا كان بينهم
    OR ؟؟ وما الناتج اذا كان بينهم AND

    (الصورة 47)





    التحدي السادس :

    .... التحدي هو ان تشرح لي بمثال .. من عندك .. لو هناك
    AND و OR و AND ... مالذي سوف يحدث اولا ؟؟ ولماذا ؟


    التحدي السابع ....

    لماذا ظهرت النتيجة السابقة ؟؟ لماذا
    KING و WARD هما اللذان عرضا فقط ؟؟

    أتحداك ان تقنعني لماذا .. أقنعني بطريقتك .. وسوف أحاول فهمك !!

    انتهى الدرس ...
    استعدوووو ... الى الشغل العنيف ..
    توقعو الدرسين التاليين .. دسمين .. لدرجة الموت ,,,
    سوف تخوصون لدرجة الاحتراف ان شاء الله
    وحتى تاريخه ..
    دعواتكم يا ناس ... ياخي ادعي من قلبك ولمدة 60 ثانية .... يعني وش بينقص منك ^^ ؟؟؟
    شكرا لكم ^^

  2. #47
    التسجيل
    08-09-2005
    المشاركات
    44

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

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

    أحببت التنبيه فقط إلى أن الصور في الصفحة الثانية
    الكثير منها لا يظهر ..

    على سبيل المثال .. الصور رقم 143 و 153 و 163

    وجزاكم الله خيراً .. تحياتي ..

  3. #48
    التسجيل
    08-09-2005
    المشاركات
    44

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    ..
    السلام عليكم ..

    أعتذر أخوي ..

    أخيراً ظهرت الصور .. شكراً لك ..

    تحياتي ..

  4. #49
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    اقتباس المشاركة الأصلية كتبت بواسطة yasean
    ..
    السلام عليكم ..

    أعتذر أخوي ..

    أخيراً ظهرت الصور .. شكراً لك ..

    تحياتي ..

    وعليكم السلام ^^
    شكرا لتنبيهك .... واصبر عليها لكي تظهر ^^&
    حياك الله يا ياسين ,.,,

  5. #50
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    بسم الله الرحمن الرحيم


    الدرس الثامن



    اسم الدرس : جملة الاستعلام
    select والدوال


    نوع الدرس : تطبيقي

    صعوبة الدرس : *** من *****

    اهميــة الدرس : ****** من ***** (
    Over)



    درجة احتراف لغة
    SQL المتوقعة بعد هذا الدرس : ** من ***** (مبتدئ متقدم )


    الوقت المتوقع منك لفهم الدرس : 10 ساعة (ساعتين فهم و 8 ساعات تطبيق )

    متطلبات تتوفر فيك : التطبيق













    المتوقع منك في هذا الدرس :






    -
    التأكد من تركيب الأوراكل ,,


    - اتقان جزء من هذه اللغة 100 %

    - معرفة ترتيب النتائج تصاعديا وتنازليا .

    - اتقان الدوال الاحادية .

    - اتقان الدوال المتعددة .






    هيا لنؤركل ^^













    السلام عليكم


    قبل البدء أريدك ان تعرف ان هناك جدول وهمي .. يدعى
    dual له أغراض كثيرة ..

    منها التجريب عليه ..... وله مأرب اخرى ,,,

    لو جربنا جملة الاستعلام هذه :






    كود:
    
    
    كود:
    
    
    
    
    select * from dual ;







    فسوف يعطيك نتيجة غريبة !!
    ....







    انظر النتيجة :






    كود:
    
    
    كود:
    
    
    
    
    D - X














    انا شخصيا لا اعرف لماذا هذه النتيجة بالذات..


    ولكن اعرف لماذا يعطينا نتائج مبهمة ..

    قلنا ان الجدول له أغراض .... فسوف تجدني في هذا الدرس وفي دروس اخرى .. أتطرق لهذا الجدول ....

    الان لو اريد التاريخ الحالي ... يعني لو ما عندي تقويم.. كيف اعرف التاريخ الحالي ؟؟

    اليك الامر !!





    كود:
    
    
    كود:
    
    
    
    
    select sysdate from dual;














    كود:
    
    
    كود:
    
    
    
    
    SYSDATE -------- 23/12/05







    واو .... صدقت النتيجة !!


    هل رأيت ذلك ؟؟





    -
    بعض الحماقات !!







    مممممم .. اريد ان احسب 1+
    4 = ؟؟؟







    كود:
    
    
    كود:
    
    
    
    
    select 1+4 from dual ;







    النتيجة :






    كود:
    
    
    كود:
    
    
    
    
    1+4 --- 5







    ههههههه ... غريب جدا ^^ .. لدينا آلة حاسبة













    كود:
    
    
    كود:
    
    
    
    
    select 'haaaaahaaaaaaahaaaaaaaaaaaa!!!' from dual ;







    والنتيجة ....






    كود:
    
    
    كود:
    
    
    
    
    'HAAAAAHAAAAAAAHAAAAAAAAAAAA!! ------------------------------ haaaaahaaaaaaahaaaaaaaaaaaa!!!







    ممممم ... الغريب ان الجدول .. لا يوجد به حقول و.... سجلات عادية !!


    والاغرب انني جربت هذا الشيء في جدول
    emp المعروف ... وظهرت نتائج غريبة !!

    اليك بعض منها ...






    كود:
    
    
    كود:
    
    
    
    
    select 'what is wrong ?' from emp ;







    النتيجة ....






    كود:
    
    
    كود:
    
    
    
    
    'WHATISWRONG?' --------------- what is wrong ? what is wrong ? what is wrong ? what is wrong ? what is wrong ? what is wrong ? what is wrong ? what is wrong ? what is wrong ? what is wrong ? what is wrong ? what is wrong ? what is wrong ? what is wrong ?







    واو ... بعدد السجلات الموجودة .. ظهر النص الذي اردت عرضه ؟؟ 14 سجل !! بعدد السجلات الموجودة في جدول الـموظفين !!


    اوكيه .. اليك التاريخ !!












    كود:
    
    
    كود:
    
    
    
    
    select sysdate from emp ;







    واو ... نتيجة مبهرة .. انظر اليها !!






    كود:
    
    
    كود:
    
    
    
    
    SYSDATE -------- 23/12/05 23/12/05 23/12/05 23/12/05 23/12/05 23/12/05 23/12/05 23/12/05 23/12/05 23/12/05 23/12/05 23/12/05 23/12/05 23/12/05







    .. نفس النتائج ولكن بعدد السجلات !!


    اذن ما فائدة جدول
    dual ؟؟؟؟؟؟






    كود:
    
    
    كود:
    
    
    
    
    select 2*10+(11-7) from emp ;







    النتيجة ...






    كود:
    
    
    كود:
    
    
    
    
    2*10+(11-7) ----------- 24 24 24 24 24 24 24 24 24 24 24 24 24 24







    واو ... يوجد في جدول الـموظفين 14 سجل ... وبعددها عرض لنا تلك النتائج ....


    ممممم .. اعتقد إنني اكتشفت في هذه اللحظة .. استنتاج غبي ...

    جدول
    dual به سجل واحد فقط .... لذا فهو يعرض لي النتيجة مرة واحدة ....

    فهمت الان لماذا به سجل واحد ؟؟ لأني اطلب منه نتيجة واحدة .. وليست 14 نتيجة مشابهة !!

    وانا شخصيا استنتجت شيء آخر .. وسأقوله لكم فيما بعد ,, ان شاء الله ^^













    و اريد ان اشير الى انني اكتشفت شيء غريب قليلا .... لعل وعسى انها غلطة من البرنامج ...


    وهي كالتالي :












    كود:
    
    
    كود:
    
    
    
    
    select ename as "The_Name_Of_Employee" from emp where ename ='KING' ;














    يعني وضعت عنوان مستعار للعمود
    ename .... وجعلته طويل قليلا ..


    فسوف يكون الناتج :






    كود:
     
    The_Name_O
     
    ----------
     
    KING




    هل لاحظت الاسم المستعار كيف عرض منه عشرة احرف فقط ؟؟


    لا ادري لماذا ولكن أتوقع انه سوف يعرض على حسب عدد خانات العمود نفسه !!

    يعني ان العمود
    ename عدد خاناته هي 10 خانات .. او 10 احرف !!

    وبالتالي اعتقد أنها غلطة في نفس برمجة البرنامج ... لذا .. لا يهم ولكن أردت التنويه ,,,

    المهم المهم .. اترك هذه الحماقات ... و حاول تركيب الأوراكل ....




    سنعود بعد شوية ... ^^ << تطوير لسبيس تون

  6. #51
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    -
    جزء من تركيب الأوراكل 10G:

    في بداية وضعك لل
    CD سوف تظهر لك بعض الخيارات ..تابع حتى تظهر لك الصورة التالية (صورة 01 ):




    رقم واحد : اجعله هذا الخيار بالضغط عليه

    رقم اثنين : سوف يعرض لك بشكل اوتوماتيكي .. وهو مسار البرنامج ...

    طبعا هو في العادة يظهر في
    C:\ لكن انا وضعته في H:\

    رقم ثلاثة :اجعل الخيار
    Enterprise Edition

    رقم اربعة : اجعل علامة الصح في المربع

    رقم خمسة : هذا مهم جدا ان تجعله اسم تتذكره ... للتسهيل اجعله مثل ما جعلته انا … الا وهو "
    ora"

    رقم ستة وسبعة : اضف كلمة سر ... لا تنسى هذه الكلمة .. اذا نسيتها .. فأرجو تحميل الاوراكل مرة اخرى ,,

    رقم ثمانية : اضغط التالي
    NEXT

    اكمل التحميل ... اذا واجهتك أخطاء في التنزيل اضغط "تجاهل"
    ignore" "

    بعد التحميل .. انظر الصورة 06


    اختر البرنامج الذي يدعى بـ
    SQL Plus

    وهو برنامج خاص بتنفيذ أوامر الـ
    SQL


    سوف يظهر لك النافذة التالية الصورة 066:


    هل تذكر كلمة السر ؟؟

    هل تذكر كلمة
    ora ؟؟

    اكتب المعلومات كما هي موضحة .. ثم اضغط اوكيه ,,

    ان معنى
    system هو مجرد مستخدم افتراضي ... له الصلاحية العظمى في الوصول الى قاعدة البيانات اوراكل ...

    سوف نتكلم فيما بعد عن الصلاحيات .. وعن المستخدمين ان شاء الله تعالى .,,,

    اذا واجهت مشكلة ... راسلنا ,,,

    سوف يظهر لك البرنامج .. اكتب ما
    يلي : الصورة 0661


    1 اكتب الامر الموضح كما هو عليه ..

    2 اكتب كلمة سر و
    احفظها جيدا .. يفضل ان تكون نفس كلمة السر التي وضعتها ...

    3 تأكيد كلمة السر

    4 اكتب الامر كما هو عليه

    5 اكتب كلمة السر

    اذا لم يعطيك كلمة
    connected او أعطاك مشاكل غيرها فراسلنا

    6 اكتب الامر كما هو عليه

    7 اكتب الامر كما هو عليه

    اذا عرضت هذه النتيجة .. فهذا يعني ان جدول
    emp موجود لديك ,, وهو جدول جاهز يأتي مع الأوراكل ,,

    الان ... أغلق البرنامج .. وافتحه مرة ثانية .. واكتب هذه المرة مايلي :

    الصورة 067




    طبعا كلمة السر الجديدة .. وقلت لك من الأفضل ان تكون نفس كلمة سر المستخدم
    system

    اسكوت
    Scott هو مستخدم افتراضي اخر .. لديه بعض الجداول التي نحن ندرسها في منهجنا ..

    الجداول هي
    emp و dept لا عليك في الجداول الباقية ,,,

    بعد الضغط على اوكيه ... سوف تظهر لك المؤشر الخاص بالكتابة ... بهذا الشكل "
    SQL>"

    يعني يا حبيبي اكتب ما شئت من جمل الـ
    SQL

    كل ما شغلت هذا البرنامج ... اكتب الامر التالي ...

    انظر الصورة 068


    لو لم تكتبه ... فسوف تعرض الجداول بشكل غير مرتب ....

    المهم .. اليك بعض الاختصارات لهذا البرنامج ..... والتي أرى أنها ليست مهمة بالمرة ,,,

    لتنفيذ اخر امر كتبته ... اكتب
    R ثم اضغط Enter



    لاستعراض اخر امر كتبته .. اكتب
    L ثم اضغط Enter



    لكي تستعرض اخر امر كتبته في مذكرة للتعديل عليه ... اكتب
    ed ثم اضغط Enter

    سوف يعرض لك برنامج المذكرة .. وبه الامر مكتوب .. عدل ما شئت فيه .. ثم اغلقه مع الحفظ ..

    بعدها سيعرض لك نتائج الامر الذي عدلته ,,,

    لحفظ اخر امر كتبته ... اكتبه بهذه الصيغة
    كود:
    
    
    كود:
    save C:\a.sql ;


    طبعا اكتب المسار الذي تريده ... انا كتبته في المسار
    c:\

    وانا سميت الملف باسم
    a

    انت بامكانك تسميته ماشئت .. مثلا سميه
    ABC

    وتريده في المسار
    D:\ ... اكتبه كما يلي :

    كود:
    
    
    كود:
    save c:\ABC.sql;


    تريد استرجاعه ؟؟

    اكتب الامر التالي /
    كود:
    
    
    كود:
    get c:\ABC.sql ;


    هناك اوامر اخرى لكن ... اتركها في وقتها ^^

    الان نرجع للدرس الرئيسي لهذا اليوم ,,,

  7. #52
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    -
    ما معنى دالة Function؟؟

    هو شيء يأخذ شيء معين .. ويعمل عمل ما ... ثم يعطيني ناتج معين
    !

    فكر في صندوق .. له مدخل ومخرج ... انت او غيرك تدخلون شيء في المدخل.. ويخرج بنتيجة من المخرج

    مثلا .. آلة تغليف علب .. تخيل شكلها مثل الصندوق ... لها مدخل ولها مخرج .. ولا تعرف ما بداخلها !!

    ادخل علبة بمقاس 1 م مكعب ... تخرج من الجهة الثانية علبة بمقاس
    1 م مكعب ولكنها مغلفة بشكل جميل ...

    ادخل رأسك ..... يخرج مطرزا من الجهة الأخرى
    وبشكل غير مقبول

    وإذا كانت الآلة ذكية .. سوف تعطي خطأ .. وتقول ان حجم رأسك ليس ا م مكعب .. وليس بالشكل المطلوب وهو على شكل مكعب

    اذن الآلة هي دالة تغليف .... دالة عملها التغليف .. (اعرف انه من الخطأ قول ذلك ولكن .. تخيل !!)

    الدالة هي مثل الآلة .. ولكنها دالة برمجية .... لا نعرف ما بداخلها .. نعرف ان لها مدخل او مداخل ... ولها مخرج او مخارج ... كالصندوق الأسود ... غامضة ....


    لماذا الدالة في منهجنا ؟

    توجد في لغة الـ
    SQL دوال برمجية .. قد بناها مطورو هذه اللغة .. وهي للاستخدام فقط ... لا نعرف كيف عملوها

    لا نعرف ما بداخلها .. من الممكن ان نتوقع كيف عملت .. ولكن لا نعرف بالضبط كيف عملت ...

    لماذا عملوها ؟ للتسهيل علينا ...ونستخدمها ..

    لماذا نستخدمها ؟ لانها مفيدة وتعمل لنا أعمال تختصر علينا الوقت ...

    مثلا ...

    توجد دالة اسمها .. دالة الإلصاق .. يعني تلصق شيء بشيء ....

    ادخل في هذه الدالة نص ... وادخل نص آخر ... وسوف تعرض لك الناتج ... النصين ملتصقين في نص واحد... يا سلام .. شيء جاهز ...

    دالة تحويل الحروف الى حروف كبيرة
    CAPITAL

    ادخل الكلمة
    abcd من مدخل الدالة (مدخل الصندوق) .. وسوف تعمل اعمال لا تعلم انت ماهي .. واذا بها .. تخرج لك من مخرج الدالة (مخرج الصندوق ) هذه النتيجة ABCD

    يا سلام ... شيء اخر .. جاهز .. لا نعرف مالذي فعلته الدالة بالداخل .. ولكن يهمنا النتيجة ..

    ,’,’,’,’,’لكي تستطيع تخيل الدالة ,’,’,’,’,’

    اريدك ان تقرأ الدرس هذا من البداية ... ثم تكمل ..
    ....

    ...

    ..

    .
    هل قرأته مرة ثانية ؟؟ احلف !!! ... اوكيه .. نكمل ,,

    الفنكشن (فنكشن =
    Function = دالة ... شكلها جميل بالعربي هاه ^^) لها مدخل أواكثر ... ولها مخرج أواكثر صح ؟؟

    في لغة الـ
    SQL يوجد نوعين من الفنكشن(لاحظ النطق للـ Function)...

    الدوال احادية الصف
    Single-Row Function

    الدوال متعددة الصف
    Multi-Row Function

    هذه النوعين .... لهما اكثر من مدخل ... ولكن لهما مخرج واحد !!

    افهم جيدا !! .. اكثر من مدخل .. ومخرج واحد .... لكلا النوعين .. الاحادية والمتعددة

    اذا أردت معرفة كيف شكل مداخل ومخارج هذه الآلة ... ااااقصد ... هذه الدالة ... فإليك شكلها المعتاد

    المخرج اسم الدالة ( المدخل الأول , المدخل الثاني ,..... , مدخل لانهائي )

    اذا لم تفهم هذا الشكل .. لا تهتم ... سوف تفهما في المستقبل البعيد ^^


    لكن اريد ان انوه الى نقاط مهمة جدا جدا جدا ,,

    - مداخل الدالة تسمى بعوامل الدالة .. أي
    Parameters ومفردها parameter لا تنسى ذلك ..

    - مخرج الدالة .. هو ما ترجع به الدالة ... يعني اذا قلنا الدالة ترجع قيمة كذا وكذا .. معناه ان الدالة تخرج كذا وكذا !!

    - ان المداخل متعددة .. ولكن المخرج واحد في دوال الـ
    SQL

    - اذا كانت الدالة ثلاث مداخل .. يعني ثلاث مداخل ... لو ان لها مدخل واحد ... يعني مدخل واحد !! ...

    لو أدخلت ست قيم والدالة أصلا مدخلين اثنين مثلا !! .. فهذه والله اكبر فضيحة ,,
    -
    بعض الدوال تقول "انت !! .. ادخل نص فقط ... لا تدخل رقم !!" والبعض الاخر .. لها مدخل نصي .. ومدخل تاريخ .. ومدخل رقمي .. وبعض الدوال كل مداخلها أرقام ... وهكذا .. فتنبه لذلك!!

    - توضع الدوال عادة بعد
    select أي كعمود .. او بعد where ... وتوضع في مداخلها عادة اسم عمود أو أي جملة ... واقصد بالجملة هنا أي نص .. أي حرف .. أي رقم .. أي تاريخ !!

    يعني في المدخل يا جملة .. يا عمود !! فقط لا غير ,,

    لانك لو أخطأت .. في بعض الأحيان حتصير مشاكل .. واذا كانت الدالة ذكية ومتفهمة لغباء مستخدمها .. فسوف تتجاهل الأمر ,,




    مفهوم !! لا تنسى ذلك ... سأقتلك !!

    الان انسى امر الدوال المتعددة ... ونبدأ بالدوال الاحادية ,,,,,
    1) الدوال الاحادية الصفوف
    Single-Row Function

    وهي اربع أنواع ..
    ( تفيدنا في اربع أغراض .. لاتنسى حفظ الانجليزي )..

    أ- دوال لأغراض النصوص
    Character Functions

    ب- دوال لأغراض الأرقام
    Number Functions

    ج- دوال لأغراض التواريخ
    Date Functions

    د- دوال لأغراض التحويل
    Conversion Functions

    الان ... ابدأ بالتحمية ....وتوكل على الله ,,,

    أ- دوال لأغراض النصوص
    Character Functions

    لاحظ دوال ... وليست دالة ..
    - دالة
    LOWER (lower = معناها اصغر أو أوطأ .. او أسفل )

    العمل :تحويل النصوص الى حروف صغيرة
    small

    المثال :
    كود:
    
    
    كود:
    Select LOWER('GOOD by') from dual
    ;

    النتيجة هي ...
    كود:
    
    
    كود:
    LOWER
    (' -------
    good by

    يعني .. أدخلنا كلمة
    GOOD by , وهي كلمة بها حروف كبيرة وحروف صغيرة .. هل لاحظت ذلك ؟؟

    سوف تتحول جميع الحروف الى small ... لتصبح good by

    لاحظ ان الحروف الكبيرة .. تحولت صغيرة .. وان الحروف الصغيرة .. كما هي عليه !!

    يعني لو أدخلنا
    GOOD BY سوف تتحول الى good by

    ولو أدخلنا
    good by فسوف تكون كما هي عليه good by



    الان مثال آخر
    ...

    اريد عرض أسماء جميع الموظفين بالحالة العادية (أي كما هي عليه في الجدول)... والحالة بالحروف الصغيرة

    كود:
    
    
    كود:
    select lower(ename) "Lower" , ename "Normal" from emp ;

    والنتيجة ....
    كود:
    
    
    كود:
    Lower Normal
    ---------- -------
    smith SMITH allen ALLEN ward WARD jones JONES martin MARTIN blake BLAKE clark CLARK scott SCOTT king KING turner TURNER adams ADAMS james JAMES ford FORD miller MILLER


    لو ان احدهم اسمه
    King سوف يعرض king في العمود lower وسوف يعرض King في العمود Normal ....

    لماذا هذه الدالة ؟؟ ومتى نستخدمها ؟؟

    سوف اعرض لك استخدام قوي جدا .. لها ,,

    لو عرفنا ان احدهم يدعى بـ كنق ...

    لا نعرف هل ادخل مدخل البيانات اسمه هكذا
    KING ام هكذا King ام كيف ؟؟

    بما اننا لا نعرف كيف ... فسوف نكتشف هذا الشيء عبر المثال التالي :


    كود:
    select ename from emp 
    
    where lower(ename) ='king';
    هل لاحظت مالذي عملته ؟؟

    أجبرت الاسم ان يكون بالشكل الحروف الصغيرة !!

    اعرف ان معظمكم لم تصل إليه الرسالة والفكرة .. لكن بالله عليكم ركزوا جيدا ...

    لماذا انا قلت
    'king' بالذات ؟؟ الم اقل لكم أنني لا اعرف حالة الحروف الخاصة بكنق ؟؟

    لماذا يا ترى؟

    النتيجة ....
    كود:
    ENAME
    
    ------
    
    KING



    -
    دالة UPPER (upper = اكبر أو أعلى ..)

    العمل :تحويل أي نص الى حروف كبيرة
    CAPITAL

    الأمثلة :
    كود:
    Select UPPER('GOOD by') from dual ;
    النتيجة ....
    كود:
    UPPER('
    
    -------
    
    GOOD BY

    أدخلنا كلمة
    GOOD by .. وتحولت الى GOOD BY

    هذه الدالة .. شبيهة التركيب للدالة
    lower .. وتنطبق عليها ما ينطبق على الدالة lower

    لذا ... فجرب نفس امثلة الـ
    Lower على هذه الدالة ,,,

    الجدير بالذكر ان هذه الدالة .. تدخل نص .. تدخل ارقام ... فلا يوجد مشاكل بها ,,,

    جرب لو وضعنا هذه الجملة ... مالذي يحدث ؟

    كود:
    select upper(sal) from emp ;

  8. #53
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    - دالة
    INITCAP

    العمل : تحويل أي نص الى
    ( الحرف الأول كبير .. وبقية الحروف صغيرة )

    الأمثلة :


    كود:
    Select INITCAP('GOOD by mY FrIeNd') from dual ;
    النتيجة كما يلي


    كود:
    INITCAP('GOODBYMY
    
    -----------------
    
    Good By My Friend
    هل لاحظت مالذي حدث ؟؟

    كلمة
    GOOD تحولت الى Good

    كلمة
    by تحولت الى By

    كلمة
    mY تحولت الى My

    كلمة
    FrIeNd تحولت الى Friend

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

    ينطبق على هذه الدالة ما ينطبق على
    Lower و Upper



    اليك التحدي الأول
    !!

    لو كتبنا الأمر التالي ....
    كود:
    select initcap(upper(lower('HI My friends ^^'))) from dual ;
    مالذي سوف ينتج ؟؟؟؟

    ولماذا نتج ما نتج ؟؟ مع تفصيل شرحك ,,,,

    ارجو منك عدم استخدام البرنامج لمعرفة النتيجة ...

    انت اجلس مع نفسك .. وتوقع النتيجة على الورق ,,

    وأنا لم اشرح هذا الجزء المهم من الدوال لغرض ما في نفسي ,,

    -دالة
    CONCAT

    العمل : ضم كلمتين او نصين وجعلهما كلمة واحدة

    الأمثلة :


    كود:
    Select CONCAT('GOOD ' , 'BY') from dual;
    لاحظ انه توجد مسافة بعد كلمة
    GOOD !! انا وضعتها عمدا لكي تصبح النتيجة ..

    كود:
    CONCAT(
    
    -------
    
    GOOD BY
    هل شاهدت النتيجة !!

    الكلمة الاولى + الكلمة الثانية = الكلمتين مضمومة !!

    ... الان بدأت اتأسف يا عرب ...

    سوف اضطر الى تصعيب المنهج اكثر واكثر .. فتحملوني يا عرب ,’,’,’

    اريد عرض أسماء الموظفين بحالة الحروف الكبيرة
    Capital في عمود .. وبحالة الحروف الصغيرة small في عمود اخر .. وأريدهم مضمومتين في عمود ثالث ....

    يجب ان تعرض فقط اسماء الموظفين الذين يعملون تحت القسم 30 ,,,


    اليك النتيجة التي انا اريدها بالضبط
    ,,



    كود:
    allen ALLEN allenALLEN
    
    ward WARD wardWARD
    
    martin MARTIN martinMARTIN
    
    blake BLAKE blakeBLAKE
    
    turner TURNER turnerTURNER
    
    james JAMES jamesJAMES

    لماذا لا تفكر قليلا قبل رؤية الحل ؟؟؟

    فكر فكر فكر فكر

    فكر فكر فكر

    فكر فكر

    فكر

    حللتها ؟؟؟

    ممتاز ... اليك الحل ...

    كود:
    select lower(ename), upper(ename) , concat(lower(ename) ,upper(ename)) from emp
    
    where deptno = 30 ;

    مسلية وبسيطة ^^ ....

    النتيجة كما اسلفنا بهذه الصورة ....

    كود:
    LOWER(ENAM UPPER(ENAM CONCAT(LOWER(ENAME),
    
    ---------- ---------- --------------------
    
    allen ALLEN allenALLEN
    
    ward WARD wardWARD
    
    martin MARTIN martinMARTIN
    
    blake BLAKE blakeBLAKE
    
    turner TURNER turnerTURNER
    
    james JAMES jamesJAMES

    -
    دالة SUBSTR

    العمل : تأخذ جزء من الكلمة او النص
    ... أي تقص منه

    الأمثلة :


    كود:
    Select SUBSTR('GOOD BY',2,3) from dual;
    لاحظ انها ثلاث مداخل !! أي ثلاث
    Parameters

    المدخل الأول
    يفترض بأن يكون نص (لقد جربتها مع الأرقام والتواريخ ونجحت ^^ .. لكن فائدتها الحقيقية في النصوص والتواريخ فقط ...), و المدخل الثاني والثالث يفترض بأن يكونا رقمين .

    اليك الناتج ...

    كود:
    SUB
    
    ---
    
    OOD

    لماذا هذه النتيجة ؟؟


    قلنا ان هذه الدالة تأخذ جزء من النص .. وتقصه لكي يتم عرضه كما نريد ....

    أدخلنا نص .. وهو
    GOOD BY .. لاحظ ان المسافة تعامل وكأنها حرف !!

    وأدخلنا عددين وهما 2 و 3 ...

    ثاني مدخل خاص برقم الحرف الذي يبدأ منه القص ... بالله عليك ثاني حرف في كلمة
    GOOD BY ماهو ؟؟

    حرف الـ
    O الأول صح ؟؟

    ثالث مدخل خاص بعدد الأحرف التي يجب ان تعرض ...

    عد ثلاث حروف بالبدء من الحرف
    O

    O

    O

    D

    وتبقى الكلمة النهائية
    OOD

    اذا لم تفهم .... اليك مثال اخر ,,,

    اريد عرض تواريخ توظيف الموظفين مقصوصة من الحرف الأول الى الحرف الرابع..

    وأريد عرض تواريخ توظيف الموظفين مرة اخرى مقصوصة من الحرف الخامس الى الحرف السادس

    وأريد نفس الشيء ولكن مقصوصة من الحرف الأول فقط !!

    وأريد عرض التواريخ بنفس صيغتها

    وأريد عرض ثاني رقم وثالث رقم من الرواتب فقط ....(مقصوص منها الرقم الثاني والثالث )

    وعرض الرواتب بنفس صيغتها ..

    يعني بهذه الصورة
    كود:
    
    
    كود:
    A B C D E F -------- ---- -- - ---------- - 17/12/80 17/1 2/ 1 800 0 20/02/81 20/0 2/ 2 1600 6 22/02/81 22/0 2/ 2 1250 2 02/04/81 02/0 4/ 0 2975 9 28/09/81 28/0 9/ 2 1250 2 01/05/81 01/0 5/ 0 2850 8 09/06/81 09/0 6/ 0 2450 4 19/04/87 19/0 4/ 1 3000 0 17/11/81 17/1 1/ 1 5000 0 08/09/81 08/0 9/ 0 1500 5 23/05/87 23/0 5/ 2 1100 1 03/12/81 03/1 2/ 0 950 5 03/12/81 03/1 2/ 0 3000 0 23/01/82 23/0 1/ 2 1300 3



    فكر فكر فكر فكر .............

  9. #54
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    لا تعرف ؟؟ انك تعرف انني اعرف انك لا تعرف ذلك
    ,,,,

    خذ الحل ..





    كود:
    Select hiredate A, SUBSTR(hiredate,0,4) B, SUBSTR(hiredate,5,2)C
    
    , SUBSTR(hiredate,0,1) D,sal E ,SUBSTR(sal,2,1) F from emp ;
    لاحظ انني سميت الأعمدة بالحروف
    A B C D ....

    A
    هو التاريخ كما هو عليه

    B
    التاريخ مقصوص منه اول اربع حروف .. لاحظ بإمكاننا ان نضع الرقم 1 بدلا من 0 ... جربتها وستجدها نفس النتيجة

    C
    مقصوص من الحرف الخامس الى السادس ... يعني ابدأ من الخامس .. واعرض حرفين الخامس والسادس....

    D
    عرض اول حرف من التاريخ .. لاحظ اننا لو وضعنا 1 بدلا من 0 .. فستأتي نفس النتيجة ....

    E
    عرض الراتب كما هو عليه ...

    F
    عرض الرقم الثاني من اليسار .. للراتب .. لاحظ اننا لا نحتاج هذه الدالة مع الأرقام .. في اغلب الأحيان

    ولكن وضعتها انا هنا لكي ترى ان الدالة ذكية قليلا .. وغبية قليلا ... وبنت حلال ... ولم تعمل مشاكل ,,,


    الان اريد ان اعرض اسماء الموظفين بالحالة الاحرف الصغيرة .. ومقصوص من الحرف الأول الى الثالث ...

    ماذا اعمل ؟؟

    فكر فكر فكر فكر ....

    اليك الحل ....
    ...

    ..

    .


    كود:
    select SUBSTR(lower(ename),1,3) , ename from emp ;
    لاحظ .... اننا استخدمنا الدالتين ...

    وهذه حلاوة استخدام الدوال ...
    بإمكانك مزج احدها مع الأخرى ... بالطريقة التي تعجبك ,,,

    اليك الناتج ....

    كود:
    SUB ENAME
    
    --- ------
    
    smi SMITH
    
    all ALLEN
    
    war WARD
    
    jon JONES
    
    mar MARTIN
    
    bla BLAKE
    
    cla CLARK
    
    sco SCOTT
    
    kin KING
    
    tur TURNER
    
    ada ADAMS
    
    
    
    SUB ENAME
    
    --- ------
    
    jam JAMES
    
    for FORD
    
    mil MILLER


    - دالة
    LENGTH (Length = الطول !!)

    العمل : توجد عدد احرف الكلمة ... او النص (طول النص ^^)

    الأمثلة :

    كود:
    Select LENGTH('GOOD By') from dual;
    كم تتوقع يوجد حرف ؟؟

    اذا قلت 6 حروف .. فقد أخطأت!! .. لماذا لا تحسب المسافة ؟؟

    المسافة تعتبر حرف كما أسلفنا

    الناتج هو :
    كود:
    LENGTH('GOODBY')
    
    ----------------
    
    7
    هل فهمت ؟؟

    لا أرى فيها صعوبة ...

    لكن لو جربناها مع الراتب مثلا ....وهو رقم .. فمالذي يحدث ؟؟

    كود:
    Select LENGTH ( sal ) from emp ;
    مالناتج ؟؟ ولماذا ؟؟
    كود:
    LENGTH(SAL) SAL
    
    ----------- ----------
    
    3 800
    
    4 1600
    
    4 1250
    
    4 2975
    
    4 1250
    
    4 2850
    
    4 2450
    
    4 3000
    
    4 5000
    
    4 1500
    
    4 1100
    
    3 950
    
    4 3000
    
    4 1300
    عرض عدد الخانات للأرقام ؟

    اعتقد انه في جملة
    Select .. سوف تحولالأرقام والتواريخ الى نصوص للعرض ...

    لا اعتقد .. بل اجزم بذلك ...

    اذا لم تفهم ما معنى تحويل الأرقام لحروف .. فسأشرح لك الان بعض الأمور
    ...

    يوجد هناك نوعين من الأرقام ...

    رقم رقمي

    ورقم حرفي
    ..

    الرقم الرقمي .. يستخدم للعمليات الحسابية كالضرب والجذر وغيرها
    ....

    والرقم الحرفي .. للعرض عادة ... فمثلا اسم ملف ما ..
    ABC123 .... الارقام 1 و 2 و 3 ... هي احرف شكلها أرقام !! ..

    اذا كنت تعرف شيء اسمه الأعداد الثنائية ... فهذا جميل ...

    الأعداد الثنائية هي 0 و 1 .. وهي التي يفهمها الحاسب ..

    والأعداد العشرية هي 0 و 1 و 2 و....
    ...9 والتي نستخدمها نحن كبشر عادة ...

    العدد الثنائي = ما
    يناسبه بالعشري

    1 =1

    10 =2

    11 =3

    100= 4

    101=5
    وهلم جر ,,,

    سوف نغطي هذه الدروس فيما بعد ان شاء الله ....

    المهم هذه الأرقام هي ارقام رقمية .. تستخدم للحسابات كما اسلفنا ..

    الأرقام الحرفية .. هي حروف على شكل ارقام .. تستخدم للعرض ...

    فمثلا ... في نظام الحروف .. وليس الأرقام ... لاحظ!! نظام الحروف وليس الأرقام !!
    0010000 = 1

    0010001 = 2

    0010010 = 3

    ......

    ......

    1000001 = A

    1000010 = B

    ....
    وهكذا ...

    طبعا الثلاثة الرقمي والذي شكله (11) غير الثلاثة الحرفي والذي شكله (0010010 )

    فأنا كنت أقول ان جملة الاستعلام
    select تعمل العمليات الحسابية والمنطقية وكل شيء ..

    وفي النهاية تحول الناتج ... الى حروف (حروف=نصوص)

    فائدة هذا التحويل هي العرض فقط على الشاشة
    ,,

    لم تفهم ؟؟

    سوف تفهم بشكل منطقي ومرتب اكثر في المستقبل البعيد ان شاء الله ,,,

    محترف ؟؟ ذكي ؟؟ عبقري ؟؟ تحب التحديات ؟؟

    تحدي للمحترفين فقط !! اكرر للمحترفين ,,
    ...

    اريد ان اعرض أسماء الموظفين في عمود

    وأريد عرض
    أسماء الموظفين ماعدا الحرف الأخير مقصوص منه في عمود اخر

    وأريد عرض الحرف الأخير من أسماء الموظفين في عمود ثالث !!

    يعني اريد الناتج بهذه الصورة :



    كود:
    A B C
    
    ---------- - -------
    
    SMIT H SMITH
    
    ALLE N ALLEN
    
    WAR D WARD
    
    JONE S JONES
    
    MARTI N MARTIN
    
    BLAK E BLAKE
    
    CLAR K CLARK
    
    SCOT T SCOTT
    
    KIN G KING
    
    TURNE R TURNER
    
    ADAM S ADAMS
    
    JAME S JAMES
    
    FOR D FORD
    
    MILLE R MILLER
    صعب هاه ؟؟

    اريد تصعيبه اكثر وأكثر
    ..

    اريد عرضه بهذا الشكل !! :


    كود:
    
    
    ALL_OF_THEM
    
    --------------------
    
    SMIT + H = SMITH
    
    ALLE + N = ALLEN
    
    WAR + D = WARD
    
    JONE + S = JONES
    
    MARTI + N = MARTIN
    
    BLAK + E = BLAKE
    
    CLAR + K = CLARK
    
    SCOT + T = SCOTT
    
    KIN + G = KING
    
    TURNE + R = TURNER
    
    ADAM + S = ADAMS
    
    JAME + S = JAMES
    
    FOR + D = FORD
    
    MILLE + R = MILLER
    في عمود واحد يدعى
    all_of_them !! وهو التحدي الثاني

    .. انا شخصيا .. لا اعتقد ان أحدكم سيحله اصلا ..

    ولا اعتقد ان احدكم سيفكر اصلا ان يقرأ كل سطر ,, هل تعرف لماذا ؟

    لأنه لا يوجد إلا واحد فقط الان .. يحل التحديات أول بأول !! ما شاء الله عليه ,,

    كانوا 25 .. وصاروا 7 ... و قبل أيام
    2 ... والآن واحد فقط .. يحل معي ,,

    انا صراحة اعتبرها مصيبة ,, لو ما بتعرف مش مشكلة ...

    لان التحديات عادة صعبة ولم اشرحها وتحتاج لاستنتاج منك ...

    لذا .. فليكن ما يكن ,,


    - الدالة
    INSTR

    العمل : تحدد مكان حرف .. في أي نص ... أي تدخل نص .. وتدخل الحرف الذي تريد معرفة مكانه
    ..

    وفي النهاية سوف ترجع (ترجع=تخرج) الدالة رقم وهو ترتيب الحرف في النص ,,

    الأمثلة :






    كود:
    Select INSTR('GOOD GOOD','D') from dual ;
    ومعناه .. في النص
    GOOD GOOD ماهو ترتيب اول D يواجهنا ؟؟

    سوف يكون الحرف الرابع صحيح ؟؟

    كود:
    INSTR('GOODGOOD','D')
    
    ---------------------
    
    4
    لو وضعنا مثلا النص
    GOOD , ثم وضعنا حرف S مثلا ..

    بالله عليك اين الحرف
    S ؟؟ هي يوجد حرف S في النص GOOD ؟؟؟

    طبعا لا ,, لذا فسوف يكون الناتج .... صفر ’,’,’,’,’,’

    اريد تعقيد الأمور اكثر و
    اكثر ,, اريد ان أتفنن في كل ما أخذناه !! مع العلم انني اعقد الأمور من رأسي , ولا يوجد منهج في العالم يعلمني كيف اعقد الأمور على نفسي , فأتوقع منك ان تعقد الأمور انت اكثر وذلك بالتمرس والتجريب , طبعا اذا لم تتمرس كثيرا وتجرب كثيرا , فلن تتعلم بشكل قوي , انا لا اريد تعقيد الأمور اكثر , ولكن اريد ان افهم فهم عميق لماذا مطورو لغة الـ SQL وضعوا هذه الدوال ؟؟ لماذا فكروا في وضعها اصلا ؟

    الان لدي سؤال غبي , اريد ان تعرض لي أسماء الموظفين بحالة الحروف الصغيرة , ومقصوصة عند حد الحرف
    a

    فمثلا
    blake يحتوي على الحرف a يعني نقص حده فيصبح bla

    ومثلا
    allene فيكون اسمه a

    ومثلا
    king فيكون فارغ , لانه لا يحتوي على الحرف a

    اليك الناتج الذي اقصده

    كود:
    ENAME B
    
    ---------- ---
    
    SMITH
    
    ALLEN a
    
    WARD wa
    
    JONES
    
    MARTIN ma
    
    BLAKE bla
    
    CLARK cla
    
    SCOTT
    
    KING
    
    TURNER
    
    ADAMS a
    
    
    
    ENAME B
    
    ---------- ---
    
    JAMES ja
    
    FORD
    
    MILLER

    طبعا لا اعتقد انك تحتاج لمثل هذا الغباء , ولكن اريدك ان تفكر فقط ,

    سواء فكرت ام لم تفكر , اليك الناتج :
    كود:
    select ename , substr(lower(ename),1,instr(lower(ename),'a')) B from emp ;


    استخدمت instr داخل دالة القص substr ,

    لو كان اسم الموظف
    blake ..

    يعني قص لي من اول حرف (الرقم واحد) , وعدد الحروف اللازمة هي ثلاثة .. لماذا ثلاثة ؟؟

    لان ترتيب الحرف
    a هو الثالث من الاسم blake , يعني الدالة instr ترجع الرقم ثلاثة فتبدو الجملة هكذا :

    Substr(lower(ename) , 1 , 3 )
    لم تفهم ؟؟

    طيب اليك ذلك لاحظ الحل بالتدرج ,’,’,’,’,’


    Substr(lower('BLAKE'),1,instr(lower('BLAKE'),'a') )

    Substr(lower('BLAKE'),1,instr('blake','a') )

    Substr(lower('BLAKE') , 1 , 3 )

    Substr('blake' , 1 , 3 )

    bla

    وهو الناتج الاساسي

    لم تفهم ؟ ممممم اعتقد أنها صعبة عليك في هذا الوقت , لذا اتركها الان وراسلني لو عندك استفسار
    .



    - الدالة
    LPAD

    العمل : تنظيم من اليسار
    .

    الأمثلة :
    كود:
    Select LPAD('AHMED',10,'*') from dual ;
    كأن لسان حال هذه الدالة يقول :

    "حدد المدخل الأول(المدخل الأول=
    AHMED في مثالنا هذا) بعدد المدخل الثاني( عشرة ) حروف ... اذا زاد .. قص منه الزائد , اذا نقص اكمل الحروف المتبقية بالمدخل الثالث (علامة النجمة) "

    انظر الناتج :

    كود:
    LPAD('AHME
    
    ----------
    
    *****AHMED
    لم تفهم ؟

    ادخلنا الحد 10 حروف صح ؟؟

    ادخلنا حرف * صح ؟

    لو ادخلنا في المدخل الأول
    ABC , فسوف يكون الناتج *******ABC (عشر حروف لاحظ من أي جهة النجوم)

    لو ادخلنا المدخل الأول
    ABCDEFGHI فسوف يكون الناتج *ABCDEFGHI (عشر حروف لاحظ من أي جهة النجوم )

    لو ادخلنا
    THE_ORACLE_COURSE فسوف يكون الناتج مقصوص لانه اطول من عشر , يعني هكذا : THE_ORACLE (عشر حروف)

    لو كان المدخل لا شيء ؟؟ فسوف يكون الناتج **********

    لماذا هذه الدالة ؟ للتنظيم فقط لا غير ,

    اسم الدالة
    LPAD , وحرف الـ L يعني Left أي يسار (يعني وضع النجوم في اليسار في مثالنا )


    تكره الشرح المفصل ؟؟

    اليك مثال اخر ,,,

    كود:
    Select LPAD(ename,10,'-') from emp ;

    كود:
    LPAD(ENAME
    
    ----------
    
    -----SMITH
    
    -----ALLEN
    
    ------WARD
    
    -----JONES
    
    ----MARTIN
    
    -----BLAKE
    
    -----CLARK
    
    -----SCOTT
    
    ------KING
    
    ----TURNER
    
    -----ADAMS
    
    -----JAMES
    
    ------FORD
    
    ----MILLER

    سوف تظهر لك النتائج بشكل منسق اكثر على برنامج
    SQL PLUS , لو طبقت الجملة السابقة طبعا !!


  10. #55
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    - الدالة
    RPAD

    العمل : تنظيم من اليمين , نفس فكرة الدالة
    LPAD ولكن R تعني يمين Right



    الأمثلة :


    كود:
    Select RPAD(ename,10,'!') , LPAD(ename,10,'?') from emp ;
    لاحظ الناتج !! ولاحظ العلامتين ! و ؟

    ولا تنسى ان تلاحظ اننا حددنا 10 حروف ,,

    مرة باليمين ومرة باليسار :
    كود:
    RPAD(ENAME LPAD(ENAME
    
    ---------- ----------
    
    SMITH!!!!! ?????SMITH
    
    ALLEN!!!!! ?????ALLEN
    
    WARD!!!!!! ??????WARD
    
    JONES!!!!! ?????JONES
    
    MARTIN!!!! ????MARTIN
    
    BLAKE!!!!! ?????BLAKE
    
    CLARK!!!!! ?????CLARK
    
    SCOTT!!!!! ?????SCOTT
    
    KING!!!!!! ??????KING
    
    TURNER!!!! ????TURNER
    
    ADAMS!!!!! ?????ADAMS
    
    JAMES!!!!! ?????JAMES
    
    FORD!!!!!! ??????FORD
    
    MILLER!!!! ????MILLER



    اليك مثال اخير ...

    نريد تجربة تصغير الحد ... مالذي سوف يحدث ؟؟
    كود:
    Select ename , RPAD(ename,4,'*') from emp ;
    والنتيجة هي :

    كود:
    ENAME RPAD
    
    ---------- ----
    
    SMITH SMIT
    
    ALLEN ALLE
    
    WARD WARD
    
    JONES JONE
    
    MARTIN MART
    
    BLAKE BLAK
    
    CLARK CLAR
    
    SCOTT SCOT
    
    KING KING
    
    TURNER TURN
    
    ADAMS ADAM
    
    JAMES JAME
    
    FORD FORD
    
    MILLER MILL
    كأنها دالة القص
    substr , وليست هي طبعا ,,

    وكما قلنا انها عملية تنظيمية ليست الا ,,,


    - الدالة
    TRIM

    العمل : اذا ادخلت حرف ما ... فسوف تحذفه من اول النص , ومن اخر النص اذا وجد هذا الحرف

    دالة اعتبرها الوحيدة غبية جدا , ووجودها غريب فعلا ,,

    اليك الأمثلة
    :

    كود:
    Select TRIM('S' FROM 'SAMI') as A from dual ;

    والناتج ,,
    كود:
    A
    
    ---
    
    AMI

    ادخلنا الحرف
    S وادخلنا النص SAMI سيكون الناتج هكذا AMI

    لو ادخلنا الحرف نفسه .. ثم ادخلنا النصوص التالية :
    SAMIS
    الناتج AMI

    SSSSAMISSSS
    الناتج AMI

    Samis
    الناتج هو amis

    SYSTEMS
    الناتج هو YSTEM

    انا شخصيا لا اعرف لماذا هذه الدالة , ولماذا وجدت اصلا , اذا عرفت سر وجودها اخبرتكم فيما بعد ان شاء الله ,

    اخيرا انتهينا من دوال النصوص ولله الحمد
    ,,, كثيرة هاه !!

    اليك تلخيص مبسط للدوال الحرفية ... الصورة (18) احفظها جيدا ,,



    ب- دوال لأغراض الأرقام
    Number Functions

    الدالة :
    ROUND

    العمل :
    تقريب الأعداد ,’,’,’

    الأمثلة :
    اليك درس في الرياضيات !! درس ممل جدا جدا جدا .. تحمل على قراءة سطوره !!

    تقريب الأعداد ..

    اولا اريدك ان تعرف مايلي :

    العدد 152 هو نفسه 0152


    العدد 89 هو نفسه 000000089

    العدد 189 هو نفسه 189.0000000 لأن الاصفار لا قيمة لها اذا كانت في يمين الفاصلة

    العدد 754 ليس هو العدد 754.0001 ... العدد الثاني اكبر بمقدار ضئيل ,,,,

    فرق بين المثالين الأخيرين
    !!

    نبدأ الدرس ...

    لماذا نقرب ؟؟؟ لكي يسهل علينا قراءة العدد ..

    أيهما
    أسهل .. 1500145 مليون و خمس مئة ألف و مئة وخمس و أربعون ... أم 1500000 مليون ونصف ؟؟

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

    تشاهد الأخبار ؟؟ لو قتل في حرب ما لا سمح الله ... هذا العدد من الضحايا ....
    "15046 ضحية "..

    ماذا يقولون ؟؟ يقولون "قتل ما يقارب 1
    5000 ضحية ليلة أمس بـ......."

    قتل ما يقارب !! .. تقريب .. صح ؟؟

    يعني حذفوا 46 شخص !! لأجل التقريب ... الـ46 لا بأس بها .. بجانب 1
    5046 ...

    على حسب احتياجاتنا نقرب الأعداد .. فمثلا في الكيمياء الذرية ... لو احدهم قرب هذا العدد 0.00456 الى 0.0046

    فنعتبرها مصيبة !! كارثة !!!! ... لماذا ؟؟ لأنه حذف عدد لا يغفر ,, ويهمنا بالدرجة الأولى
    ..

    كأنه قال "قتل 1
    0000 ضحية !! " هل فهمت النسبة والتناسب ؟؟

    نبدأ في كيفية التقريب ...

    لو هنالك طالب شاطر .. واخذ نسبة 98.8 نريد تقريب النسبة للعدد الصحيح (عدد صحيح = عدد بدون كسور)
    ... ماهو الناتج ؟؟

    طبعا 99 ,,

    لو هنالك طالب اخر حصل على نسبة 98.4 .. نريد التقريب الى العدد الصحيح .. ما
    هو الناتج ؟؟

    طبعا 98 ,,

    هل تعرف لماذا ؟؟

    لأن 98.8 يوجد في الكسر 8 وهو اكبر من او يساوي الـ 5 ,, اذن نحذفه ونزيد الخانة التي بعده بواحد يعني هكذا

    98

    +

    1

    =

    99
    وكما لاحظنا في 98.4 ... تجاهلنا الـ 4 لأنه اصغر من الـ5 ,,,

    لو مثلا احدهم حصل على 89.5
    4 .. ماهو التقريب الى العدد الصحيح ؟؟ الكسر اكبر من او يساوي 5 ... اذن

    89

    +

    1

    =

    90

    هل فهمت الفكرة المبدئية ؟؟ تتوقف على الكسر هل اكبر من او تساوي الـ 5 او لا !!

    الان دالة
    ROUND هي دالة تقريب معقدة بعض الشيء ..

    اليك شكلها ... لو اردنا تقريب العدد 549.
    8874

    ROUND(549.8874 , 1)= ???

    هنالك مدخلان (
    2 Parameters ) في هذه الدالة .. المدخل الأول هو الرقم المراد تقريبه .. المدخل الثاني هو الخانة المراد اختبارها !! ... كيف ؟؟



  11. #56
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    اليك الصورة 28





    في الصورة اريدك ان تحفظ الخانات .. فالفاصلة العشرية لا تحسب .. يمين الفاصلة العدد واحد .. ثم اثنين ثم ... الخ

    ويسار الفاصلة يوجد صفر , سالب واحد , سالب اثنين ...... الخ

    احفظها جيدا .. يمين الفاصلة الأعداد الموجبة .. يسار الفاصلة الصفر والأعداد السالبة !!

    انا وضعت الرقم واحد في المدخل الثاني في الدالة
    ROUND السابقة .. يعني اختبر الخانة بيمين الخانة واحد (اختبر الخانة رقم اثنين)...

    سؤال خطير !! ما معنى اختبر ؟؟

    يعني اذا كانت اكبر من او تساوي 5 ... اضف واحد للعدد الذي يليه واجعله صفر واجعل الارقام التي يمينه كلها اصفار
    ...

    واذا كانت اصغر من 5 ... اجعله واجعل الارقام التي يمينه كلها اصفار فقط (بدون زيادة واحد للعدد الذي تليه)
    ,,

    في الصورة الخانة رقم واحد يوجد بها الرقم
    8 ....انظرالرقم في الخانة التي بيمينه (الخانة رقم اثنين) .. يوجد العدد 8 ايضا !! ..

    هل العدد 8 اكبر من او يساوي الـ 5 ,,, اذن .. نحذف جميع الخانات التي يمين الخانة رقم واحد ... ونزيده بواحد ,,

    لم تفهم ؟؟

    ROUND(549.8874 , 1 ) = 549.9000=549.9
    اختبرنا الخانة الثانية
    .. (لماذا نختبر الخانة الثانية ؟؟ لاننا ادخلنا واحد ...)

    طبعا قلنا انه 549.9000 ثم حذفنا الاصفار في يمين الفاصلة لانها لا تساوي شيئا !!

    ROUND(549.8874 , 3) = 549.8870 = 549.887
    اختبرنا الخانة الرابعة
    .. (لماذا نختبر الخانة الرابعة ؟؟ لأننا ادخلنا ثلاثة ... )

    ROUND(549.8874 , 0 ) = 550.0000=550
    اختبرنا الخانة الأولى
    ...

    كأن المدخل الخاص بالخانات يحدد عدد الكسور .. فمثلا ادخلنا رقم واحد يعني اريد كسر واحد يظهر .. كما في الناتج السابق 549.9


    ثم أدخلنا رقم ثلاثة .. يعني اريد ثلاث كسور تظهر كما في الناتج السابق 549.887 !!

    ثم أدخلنا رقم صفر .. يعني لا اريد أي كسر يظهر ,,

    لو أدخلنا العدد سالب اثنين ؟؟ او سالب واحد ؟؟

    اذا سالب اثنين .. نختبر الخانة رقم كم ؟؟ رقم سالب واحد صح ؟؟ لكن مالذي يحدث
    ROUND(549.8874 , -2 ) = 500.0000=500

    ROUND (549.8874 , -1 ) = 550.0000=550

    ROUND(549.8874 , -3 ) = 1000.0000 = 1000
    لاحظ في لماذا صارت 1000 ؟؟ الخانة -2 ... يوجد بها خمسة .. صح ؟ اذا اختبرناها فسوف نصفرها مع كل الأعداد بيمينها .. ثم نضيف واحد للعدد الذي يليها .. والذي يقطن في الخانة رقم -3

    ماهو العدد في الخانة رقم -3 ؟؟ طبعا صفر ...

    يعني كأن الرقم بهذه الصورة : 0549.8874

    هل لاحظت الصفر ؟؟ لا قيمة له .. لذا فهو لا يكتب عادة
    ..

    ROUND(549.8874 , -4 ) = 00000.0000 = 0

    سالب اربعة ؟؟ نفس الفكرة ..

    00549.8874 اختبر الخانة -3 ... وسيصبح الناتج 00000.0000 يعني 0 !!

    ارجوا إعادة النظر في هذا الدرس مرة ثانية وثالثة حتى تفهمه ...

    الان نريد استخدام الدالة كما ينبغي ...

    كود:
    select round (549.8874,-3) from dual ;
    والناتج يصبح ...

    كود:
    ROUND(549.8874,-3)
    
    ------------------
    
    1000

    تخيل ان المدير (هو نفسه المدير السابق) .... يشكو من حساسية الأعداد في بعض الأحيان ...
    ,, ويريد ان يرى رواتب الموظفين بشكل سلس ومقبول , لا يهمه الدقة في الرواتب .. ولكن يريد ان يرى الشكل السهل ..

    يعني يريدها بهذه النتيجة

    كود:
    ENAME SAL C
    
    ---------- ---------- ----------
    
    SMITH 800 800
    
    ALLEN 1600 1600
    
    WARD 1250 1300
    
    JONES 2975 3000
    
    MARTIN 1250 1300
    
    BLAKE 2850 2900
    
    CLARK 2450 2500
    
    SCOTT 3000 3000
    
    KING 5000 5000
    
    TURNER 1500 1500
    
    ADAMS 1100 1100
    
    JAMES 950 1000
    
    FORD 3000 3000
    
    MILLER 1300 1300
    العمود
    C هو الراتب بعد التقريب ,,, (C = اسم مستعار )

    هل تعرف مالجملة ؟؟؟

    .....

    ...

    .
    انتهى الوقت ..

    اليك الجملة :
    كود:
    select ename , sal , ROUND(sal,-2 ) C from emp ;
    ...
    انتهت هذه الدالة المملة ...

    الدالة :
    TRUNC

    العمل :
    قص العدد ... مشابهة لـ ROUND

    الأمثلة :
    هل تذكر عملية التقريب في دالة
    ROUND؟

    في دالة الـ
    ROUND اذا اختبرنا الخانة .. فنرى احد الاحتمالين :

    1
    - اكبر من او تساوي الخمسة ؟؟ اذن اضف واحد للعدد التالي (التالي =الذي على اليسار) وصفر العدد وكل الاعداد في اليمين

    2- اذا كان اصغر من الخمسة , صفر العدد وكل الاعداد في اليمين ...


    في الدالة
    TRUNC .....

    لا يوجد الا احتمال واحد .. وهو الاحتمال الثاني

    سواء كان اكبر من او يساوي الخمسة .. أو حتى اصغر من الخمسة لا يهم ...

    المهم صفر العدد الذي نختبره والاعداد التي في اليمين .. وبدون اضافة الواحد !!
    TRUNC (549.8874 , 2 ) =549.88

    TRUNC (549.8874 , 1) =549.8

    TRUNC (549.8874 , 0) = 549

    TRUNC (549.8874 , -1) = 540

    TRUNC (549.8874 ,-2)=500

    TRUNC (549.8874 , -3) =0

    TRUNC (549.8874 , -4) =0

    TRUNC (549.8874 , 5) = 549.8874


    كأنها (لاحظ كلمة كأنها ) عملية قص للرقم ....

    بعض الأحيان هذه الدالة ادق من الدالة السابقة ..

    وبعض الأحيان تلك الدالة ادق من هذه ..

    كود:
    select TRUNC (549.8874 ,1) from dual ;
    والناتج هو :
    كود:
    TRUNC(549.8874,1)
    
    -----------------
    
    549.8

    الان نريد عرض الرواتب بالدالتين .. مرة بالسالب اثنين ومرة بالسالب ثلاثة
    كود:
    select sal , round(sal,-2) A , round(sal,-3) B
    
    ,trunc(sal,-2) C , trunc(sal,-3) D from emp ;

    انظر الناتج ولاحظ الفروق ,,,

    كود:
    SAL A B C D
    
    ---- ---------- ---------- ---------- ----------
    
    800 800 1000 800 0
    
    1600 1600 2000 1600 1000
    
    1250 1300 1000 1200 1000
    
    2975 3000 3000 2900 2000
    
    1250 1300 1000 1200 1000
    
    2850 2900 3000 2800 2000
    
    2450 2500 2000 2400 2000
    
    3000 3000 3000 3000 3000
    
    5000 5000 5000 5000 5000
    
    1500 1500 2000 1500 1000
    
    1100 1100 1000 1100 1000
    
    950 1000 1000 900 0
    
    3000 3000 3000 3000 3000
    
    1300 1300 1000 1300 1000



    الدالة :
    MOD

    العمل :
    دالة باقي القسمة ... من اهم الدوال البرمجية الحسابية ,,,

    الأمثلة :
    تعلمت في صغرك عملية القسمة ,


    1000 قسمة 500 = 2

    كبرت قليلا ... وعرفت ان :

    1000 قسمة 502 = 1 والباقي 498 ..

    وكبرت كثيرا .. وعلمت ان :

    1000 قسمة 502 =
    1.99203187

    ولما وصلت الى هذا السطر .. نسيت مالذي حدث من قبل !! دعني أذكرك
    ...

    لماذا يلزمنا باقي القسمة ؟؟ سوف تعرف ذلك فيما بعد ... وخاصة في البرمجة ,,

    اريدك الان ان تعرف ما هو باقي القسمة ....

    1000 باقي القسمة على 50 = صفر

    50 باقي القسمة على 5 = صفر

    50 باقي القسمة على 6 =
    2

    5 باقي القسمة على 1000 = 5

    5 باقي القسمة على 6 = 5

    5 باقي القسمة على 5= صفر

    0 باقي القسمة على 5 = صفر

    هل تذكرت الان ؟

    دالة
    MOD هي دالة باقي القسمة ..

    جرب باقي القسمة للـ 6 على الـ 5


    كود:
    select MOD(6,5) from dual ;

    لاحظ المدخل الأول والثاني ... اولا الست ثم الخمس ,,
    كود:
    MOD(6,5)
    
    ---------
    
    1
    نريد باقي قسمة الراتب الاساسي على الراتب الاضافي لكل موظف يملك راتب اضافي ...

    كود:
    select sal,comm,mod(sal,comm) from emp
    
    where comm is not null ;
    اليك النتيجة ... تتبعها جيدا ,,
    كود:
    SAL COMM MOD(SAL,COMM)
    
    ---- ---------- -------------
    
    1600 300 100
    
    1250 500 250
    
    1250 1400 1250
    
    1500 0 1500

    انتهت الدوال الرقمية ...

    لاحظ أنني لم أشدد على دالة باقي القسمة كثيرا رغم أهميتها ,’,’,’
    .....
    سنعود بعد شوية ,,

  12. #57
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    ج- دوال لأغراض التواريخ
    Date Functions

    قبل البدء اريد ان اعرض عليك أسماء الأشهر الإفرنجية لأن أوراكل وللأسف لا تعرف لا شعبان رجب ولا رجب رمضان ,,

    يناير , فبراير , مارس , ابريل , مايو , يونيو , يوليو ,أغسطس , سبتمبر , أكتوبر , نوفمبر , ديسمبر
    January , February , March , April , May , June , July , August , September , October , November , December
    طبعا بالانجليزي احفظهم ,’,’,

    الدالة
    : SYSDATE

    العمل :
    توجد التاريخ الحالي .. طبعا توجده من تاريخ النظام للحاسب الآلي المستخدم لهذه الدالة

    الأمثلة :
    أخذناها من قبل ... هل تذكر ؟؟

    اليك مثال عليها ...
    كود:
    select sysdate from dual ;
    وسوف تعرض التاريخ الحالي ... طبعا عرضت لي هذه النتيجة ... وانت ستعرض لك تاريخ يوم استخدامك لها ,,
    كود:
    SYSDATE
    
    --------
    
    29/12/05

    الدالة :
    MONTHS_BETWEEN

    العمل :
    توجد الفرق بين تاريخين ... يعني ندخل تاريخ ثم ندخل تاريخ اخر .. توجد لنا عدد الشهور بينهما !!

    الأمثلة :
    دالة قوية جدا لإيجاد عدد الشهور بين تاريخين ... يعني ندخل شهر .. ثم ندخل شهر اخر .. واترك الدالة تفرم وتعجن و
    تصلخ وتجزر ... وفي النهاية تعطينا الفرق بينهما ,,,

    يعني مثلا .. ولد احدهم في التاريخ 10/10/1999 م ثم مات رحمة الله عليه في تاريخ 10/11/1999 م

    بالله عليك كم شهر مضى من يوم ولادته ؟؟ كم ؟؟

    أكيد
    شهر ,,

    اليك المثال مع العلم ان أوراكل تعتبر هذا الشكل "10-10-99" تاريخ .. وتعتبر هذا الشكل "10-10-1999" ايضا تاريخ .. للتاريخ إشكال كثيرة سوف نغطيها .. فلا تقلق ...
    :



    كود:
    select months_between('10-11-1999','10-10-99') from dual ;
    لاحظ في المدخلات
    Parameters الخاصة بالدالة ان الكبير اولا ثم الصغير ثانيا ... أي ان الأحدث وضعناه اولا ثم الأقدم ثانيا ...

    ولاحظ ان احدها على الشكل
    DD/MM/YYYY (D=day , M=month , Y=year) و الآخر على شكل DD/MM/YY وفوق هذا لا يوجد مشكلة ... جميل جدا ...

    اليك الناتج ....

    كود:
    MONTHS_BETWEEN('10-11-1999','10-10-99')
    
    ---------------------------------------
    
    1
    الناتج يساوي واحد ؟؟ واحد ماذا ؟؟ طبعا واحد شهر ... يعني الفرق بين التاريخين السابقين .. هو شهر واحد ..

    نحن وضعنا التاريخ الأحدث اولا صح ؟؟

    لو عكسناها ؟؟ هل تقبل الدالة ؟؟ هل ذكية لكي تعرف ذلك ؟؟ لنرى ...

    كود:
    select months_between('10-10-99','10-11-99') from dual ;

    كود:
    MONTHS_BETWEEN('10-10-99','10-11-99')
    
    -------------------------------------
    
    -1
    سالب واحد ؟؟

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

    يعني في النهاية الفرق شهر واحد ... لا يهمنا سالب .. موجب ... هل فهمت !! تجاهل السالب فقط في إيجاد أي فرق ,,,

    طيب ... تعقيد الأمور اكثر واكثر ... احدهم (هو نفسه لكن حصل خطأ في التواريخ ) ولد في التاريخ 10/10/1999 م .. وتوفي رحمه الله في تاريخ 11/11/1999 م ... كم شهر مضى من يوم ولادته ؟؟

    شهر ويوم ... صح ؟؟ هل تتوقع ان هذه الدالة ذكية جدا لكي تقول لك .. يا حبيب ألبي الفرق هو شهر ويوم ؟؟

    لا .. وألف لا ... سوف تعرض أرقام وكسور

    اليك المثال ....
    كود:
    select months_between('11-11-99','10-10-99') from dual ;
    ماهي النتيجة ؟؟ ماهو المتوقع
    !!

    نحن قلنا ان الدالة ترجع (ترجع = تخرج) فقط عدد .... وهذا العدد المفترض بأن يكون عدد الأيام !! صح ؟؟

    غلط ... بل عدد الأشهر !!

    الان كم الأشهر المتوقعة !! انظر الناتج
    كود:
    MONTHS_BETWEEN('11-11-99','10-10-99')
    
    -------------------------------------
    
    1.03225806
    تحدي للمحترفين الأذكياء فقط !! .... بالله عليك .. كيف جاء هذا الكسر ؟؟؟


    التحدي الثالث هو كيف جاء هذا الكسر ..؟؟ ولماذا جاء ؟؟وما هو هذا الكسر اصلا ؟؟؟؟؟
    فسر !!

    ....
    الان اريد عرض كم شهر مضى على الموظفين من تواريخ توظيفهم وحتى الان !!

    حتى الان ؟؟ من أين نأتي بتاريخ الحالي ؟؟؟؟

    اليك جملة الاستعلام !!
    كود:
    select ename ,months_between(sysdate,hiredate) A from emp ;
    والناتج هو ...

    كود:
    ENAME A
    
    ---------- ----------
    
    SMITH 300.414125
    
    ALLEN 298.317351
    
    WARD 298.252835
    
    JONES 296.897996
    
    MARTIN 291.059286
    
    BLAKE 295.930254
    
    CLARK 294.672189
    
    SCOTT 224.349609
    
    KING 289.414125
    
    TURNER 291.704447
    
    ADAMS 223.220576
    
    JAMES 288.865738
    
    FORD 288.865738
    
    MILLER 287.220576
    جاءك المدير ... (نفس ذلك المعقد ) وقرأ النتيجة السابقة ... وقال لك .. " ما هذا يا مهمل !! لا اعرف ان اقرأ هذه !!!.

    لا اريد عدد الشهور ... اريد عدد السنوات !!
    "

    ما العمل ؟؟؟ ما الذي نستطيع فعله في هذه الحالة ؟؟؟ هل تعرف ؟؟

    فكر قبل ان تشاهد الحل !! ...


    أحب ان أشير الى نقطة .. هو ان 99.99999% منكم ... حسب ما اعتقد
    ... انه يقرأ فقط بدون تفكير ..

    هل يجب علي ان أذكرك في كل مثال ان تفكر اولا ؟؟ اعرف انك تحك رأسك الان وسوف تفكر في الحل ...

    جميل جدا .....

    اليك الحل ..

    عدد السنين = عدد الشهور / 12 !!

    12 شهر = 1 سنة ... صح ؟؟

    24 شهر = 2 سنة ... صح ؟؟

    مالذي عملناه ؟؟؟

    اخذنا مثلا 24 .. وقسمناها على 12 وصار الناتج 2 ,,


    انظر ....
    كود:
    select ename , months_between(sysdate,hiredate)/12 A, hiredate B from emp ;
    وانظر الناتج ....
    كود:
    ENAME A B
    
    ---------- ---------- --------
    
    SMITH 25.0345137 17/12/80
    
    ALLEN 24.8597825 20/02/81
    
    WARD 24.8544061 22/02/81
    
    JONES 24.7415029 02/04/81
    
    MARTIN 24.2549438 28/09/81
    
    BLAKE 24.6608578 01/05/81
    
    CLARK 24.556019 09/06/81
    
    SCOTT 18.695804 19/04/87
    
    KING 24.117847 17/11/81
    
    TURNER 24.3087072 08/09/81
    
    ADAMS 18.601718 23/05/87
    
    JAMES 24.0721481 03/12/81
    
    FORD 24.0721481 03/12/81
    
    MILLER 23.9350513 23/01/82

    نظر المدير .. الى النتيجة ... ثم نظر اليك وكأنه يريد قتلك .... لماذا ؟؟ لأنها مازالت غير سهلة القراءة
    ..

    لا يريد هذه الأرقام بالكسور .. يريدها هكذا .. 25 سنة .. 26 سنة ..... الخ ... مالعمل ؟ فكر فكر فكر فكر ......

    خذ الحل ...
    كود:
    select ename, ROUND(months_between(sysdate,hiredate)/12,0)||' years' A from emp ;
    النتيجة .... كما يلي ... سهلة القراءة
    ,,,

    كود:
    ENAME A
    
    ---------- ---------
    
    SMITH 25 years
    
    ALLEN 25 years
    
    WARD 25 years
    
    JONES 25 years
    
    MARTIN 24 years
    
    BLAKE 25 years
    
    CLARK 25 years
    
    SCOTT 19 years
    
    KING 24 years
    
    TURNER 24 years
    
    ADAMS 19 years
    
    JAMES 24 years
    
    FORD 24 years
    
    MILLER 24 years

    اليك تحدي من نوع خاص جدا ...

    بينما كنت اكتب هذه السطور .. واذا بعقلي يخبرني انه يريد عرض نتيجة كهذه !! (من جدول الموظفين )
    :



    كود:
    YEARS MONTHS DAYS HIREDATE SYSDATE
    
    ----- ---------- ---------- -------- --------
    
    25 0 12 17/12/80 29/12/05
    
    24 10 9 20/02/81 29/12/05
    
    24 10 7 22/02/81 29/12/05
    
    24 8 27 02/04/81 29/12/05
    
    24 3 1 28/09/81 29/12/05
    
    24 7 28 01/05/81 29/12/05
    
    24 6 20 09/06/81 29/12/05
    
    18 8 10 19/04/87 29/12/05
    
    24 1 12 17/11/81 29/12/05
    
    24 3 21 08/09/81 29/12/05
    
    18 7 6 23/05/87 29/12/05
    
    24 0 26 03/12/81 29/12/05
    
    24 0 26 03/12/81 29/12/05
    
    23 11 6 23/01/82 29/12/05
    جلست عشر دقائق (عشر دقائق كثيرة هاه ؟؟) في معرفة الحل .. أخيرا تمكنت ^^ ... هل تعرف لماذا تمكنت !!؟؟ لأني أردت ان اعرف ! الإرادة هي أهم شيء ,, والحاجة هي أم الاختراع ,,

    طبعا عرض الفرق بعدد السنين ... ولكن بدون كسور هذه المرة ... بل بالشهور والأيام !! مثلا ....

    10/10/2000 و 9/9/1999 بينهما سنة .. وشهر ... ويوم .. صح !! هل تعرف كيفية عمل جملة استعلام كهذه ؟؟

    لا تتعب نفسك كثيرا .. ولا تحبط نفسك اذا رأيت الجملة ...

    ان هذه الجملة ... لا يخرجها إلا ذوي الباع الطويل في البرمجة !! .. وستخرج اعقد منها يوما ما .. قريبا ان شاء الله .. فلا تخف ولا تحزن ,, وعلى فكرة ... من سيطلب منك ذلك غير مديرنا المعقد ؟؟؟ لا اعتقد احد سيفعل ذلك ,,

    يعني اذا كنت مبتدأ .. او متوسط ... او حتى خبير في بعض الأحيان .. من الممكن ان لا تتمكن من عملها ..

    انظر إليها ... وأريد من هذا التحدي شيء واحد .. تفسير الجملة .. بشكل منطقي ومعقول ,, هل تستطيع ؟؟


    وهو التحدي الرابع !!


    كود:
    select TRUNC(months_between(sysdate,hiredate)/12) years
    
    ,TRUNC( months_between(sysdate,hiredate),0)-TRUNC(months_between(sysdate,hiredate)/12)*12 months
    
    , TRUNC( MOD(months_between(sysdate,hiredate)*31,31),0) days
    
    , hiredate ,sysdate from emp ;

    اكثرت عليكم في هذه الدالة .. ولكن فيها تفكير كثير برمجيا .. لذا احببت ان تفكروا كثيرا ,,

    الدالة :
    ADD_MONTHS

    العمل :
    اضافة عدد من الشهور الى تاريخ ما ,,,

    الأمثلة :
    اذا اردت ان تعرف كم التاريخ بعد 100 شهر من الان .... مالذي عليك فعله ؟؟

    اليك جملة الاستعلام التالية والتي تفيد الى اننا نضيف الى تاريخ توظيف الموظفين 100 شهر ....





    كود:
    select add_months(hiredate,100) , hiredate from emp ;

    انظر الناتج
    كود:
    ADD_MONT HIREDATE
    
    -------- --------
    
    17/04/89 17/12/80
    
    20/06/89 20/02/81
    
    22/06/89 22/02/81
    
    02/08/89 02/04/81
    
    28/01/90 28/09/81
    
    01/09/89 01/05/81
    
    09/10/89 09/06/81
    
    19/08/95 19/04/87
    
    17/03/90 17/11/81
    
    08/01/90 08/09/81
    
    23/09/95 23/05/87
    
    03/04/90 03/12/81
    
    03/04/90 03/12/81
    
    23/05/90 23/01/82

    اعتقد انها سهلة .... وليست بتلك الصعوبة ...

    نريد اضافة 5 سنوات ... مالذي يحدث ؟؟

    فكر فكر فكر ....

    نظيف 5 * 12 ... يعني 60 شهر .... فكر فيها قليلا ... وانظر الجملة ..
    كود:
    select add_months(hiredate,6*12) , hiredate from emp ;

    النتيجة ...
    كود:
    ADD_MONT HIREDATE
    
    -------- --------
    
    17/12/86 17/12/80
    
    20/02/87 20/02/81
    
    22/02/87 22/02/81
    
    02/04/87 02/04/81
    
    28/09/87 28/09/81
    
    01/05/87 01/05/81
    
    09/06/87 09/06/81
    
    19/04/93 19/04/87
    
    17/11/87 17/11/81
    
    08/09/87 08/09/81
    
    23/05/93 23/05/87
    
    03/12/87 03/12/81
    
    03/12/87 03/12/81
    
    23/01/88 23/01/82

    سهلة !!

    انتهى الدرس هنا .. ولم تنتهي جملة الدوال ....

    في الدروس القادمة سنكمل الدوال الاحادية ... ان شاء الله ... ثم المتعددة ....

    وسيكون بعدها دروس لدرجة الاحتراف ان شاء الله .. في لغة ال
    SQL
    اتوقع 5 دورس ان شاء الله وننتهي من الـ
    SQL
    وحتى ذلك الموعد احفظ الدوال صم !!!

    الى اللقاء


  13. #58
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء


    اوبس ... نسيت ..
    التحديات .... اريدكم ان تضعوها في موضوع الاستفسارات ..
    والذي لا يستطيع !!
    يرسلها لي ,,,
    اليك التحدي الأول
    !!

    لو كتبنا الأمر التالي ....
    كود:
    select initcap(upper(lower('HI My friends ^^'))) from dual ;
    مالذي سوف ينتج ؟؟؟؟

    ولماذا نتج ما نتج ؟؟ مع تفصيل شرحك ,,,,

    ارجو منك عدم استخدام البرنامج لمعرفة النتيجة ...

    انت اجلس مع نفسك .. وتوقع النتيجة على الورق ,,

    وأنا لم اشرح هذا الجزء المهم من الدوال لغرض ما في نفسي ,,

    التحدي الثاني ... وهو تحدي للمحترفين فقط !! اكرر للمحترفين ,,...

    اريد ان اعرض أسماء الموظفين في عمود

    وأريد عرض أسماء الموظفين ماعدا الحرف الأخير مقصوص منه في عمود اخر

    وأريد عرض الحرف الأخير من أسماء الموظفين في عمود ثالث !!

    يعني اريد الناتج بهذه الصورة :


    كود:
    A B C
    
    ---------- - -------
    
    SMIT H SMITH
    
    ALLE N ALLEN
    
    WAR D WARD
    
    JONE S JONES
    
    MARTI N MARTIN
    
    BLAK E BLAKE
    
    CLAR K CLARK
    
    SCOT T SCOTT
    
    KIN G KING
    
    TURNE R TURNER
    
    ADAM S ADAMS
    
    JAME S JAMES
    
    FOR D FORD
    
    MILLE R MILLER
    صعب هاه ؟؟

    اريد تصعيبه اكثر وأكثر ..

    اريد عرضه بهذا الشكل !! :


    كود:
    
    
    ALL_OF_THEM
    
    --------------------
    
    SMIT + H = SMITH
    
    ALLE + N = ALLEN
    
    WAR + D = WARD
    
    JONE + S = JONES
    
    MARTI + N = MARTIN
    
    BLAK + E = BLAKE
    
    CLAR + K = CLARK
    
    SCOT + T = SCOTT
    
    KIN + G = KING
    
    TURNE + R = TURNER
    
    ADAM + S = ADAMS
    
    JAME + S = JAMES
    
    FOR + D = FORD
    
    MILLE + R = MILLER
    في عمود واحد يدعى
    all_of_them !!



    التحدي الثالث ...
    كود:
    select months_between('11-11-99','10-10-99') from dual ;
    ماهي النتيجة ؟؟ ماهو المتوقع
    !!

    نحن قلنا ان الدالة ترجع (ترجع = تخرج) فقط عدد .... وهذا العدد المفترض بأن يكون عدد الأيام !! صح ؟؟

    غلط ... بل عدد الأشهر !!

    الان كم الأشهر المتوقعة !! انظر الناتج
    كود:
    MONTHS_BETWEEN('11-11-99','10-10-99')
    
    -------------------------------------
    
    1.03225806
    تحدي للمحترفين الأذكياء فقط !! .... بالله عليك .. كيف جاء هذا الكسر ؟؟؟


    التحدي الثالث هو كيف جاء هذا الكسر ..؟؟ ولماذا جاء ؟؟وما هو هذا الكسر اصلا ؟؟؟؟؟
    فسر !!



    التحدي الرابع

    .. تفسير الجملة .. بشكل منطقي ومعقول ,, هل تستطيع ؟؟






    كود:
    select TRUNC(months_between(sysdate,hiredate)/12) years
    
    ,TRUNC( months_between(sysdate,hiredate),0)-TRUNC(months_between(sysdate,hiredate)/12)*12 months
    
    , TRUNC( MOD(months_between(sysdate,hiredate)*31,31),0) days
    
    , hiredate ,sysdate from emp ;



  14. #59
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    بسم الله الرحمن الرحيم
    الدرس التاسع
    اسم الدرس : جملة الاستعلام
    select والدوال

    نوع الدرس : تطبيقي
    صعوبة الدرس : *** من *****
    اهميــة الدرس : ****** من ***** (
    Over)

    درجة احتراف لغة
    SQL المتوقعة بعد هذا الدرس : ** من ***** (مبتدئ متقدم )

    الوقت المتوقع منك لفهم الدرس :
    11 ساعة (ثلاث ساعات فهم و 8 ساعات تطبيق )

    متطلبات تتوفر فيك : التطبيق

    المتوقع منك في هذا الدرس :
    - اتقان جزء من هذه اللغة 100 %
    - اتقان الدوال الاحادية .
    - اتقان الدوال المتعددة .
    هيا لنؤركل ^^

    السلام عليكم
    قبل البدء اشير الى انه من الافضل ان تحل الواجبات والتحديات .. وان لا ترسلها لي .. بل اعرضها في موضوع استفسارات الاوراكل ...
    لكي يتم المناقشة فيها ....
    اخذنا الدوال الاحادية ووصلنا عند الدالة
    add_months ..

    نكمل الدوال الاحادية الصف.... ونكمل بقية الدوال الخاصة بالتاريخ

    الدالة :
    NEXT_DAY

    العمل :
    لو أردت تاريخ الجمعة القادم ... هذه الدالة ستوجد ذلك التاريخ ,,,

    الأمثلة :
    اريد عرض تاريخ الجمعة القادم ... يعني اقرب يوم جمعة .. تخيل لو اليوم أربعاء .. وتاريخ اليوم 10/10/1960 م (اعرف ان التاريخ قديم) فإن تاريخ اقرب يوم جمعة هو تاريخ بعد بكرة ... يعني 12/10/1960 م .... هل فهمت معنى الجمعة القادم ؟؟
    يوم كتابة هذه السطور .. هو يوم الجمعة ... تاريخ 30/12/2005 م ..... اوبس ... غدا سيكون هنالك سنة جديدة .. وانا لا اعلم ... لا يهم ,,,
    المهم اريد يوم الجمعة القادم ... بتاريخ كم ؟؟ طبعا يا 6/1/2006 م او 7/1/2006 م ... ربما يكون الشهر الحالي 31 يوم ... المهم لنرى عبر الجملة التالية ..

    كود:
    
    
    كود:
    select next_day (sysdate,'FRIDAY') from dual ;

    والنتيجة هي ....
    كود:
    
    
    كود:
    ERROR at line 1:
    ORA-01846: not a valid day of the week

    اوبس .. لماذا كلمة
    FRIDAY خاطئة ؟؟

    قد تستغرب يا صاحبي .. ولكن النظام الخاص بكمبيوتري عربي !!
    لذا .. فإن الجملة يجب ان تكون ...
    كود:
    
    
    كود:
    select sysdate , next_day(sysdate,'الجمعة') from dual ;


    والنتيجة هي ...
    كود:
    
    
    كود:
    SYSDATE NEXT_DAY
    -------- --------
    30/12/05 06/01/06


    هل فهمت ^^ ...

    مثلا نريد عرض تاريخ الجمعة القادم لتاريخ التوظيف لكل موظف ... هل نشاهد ذلك ؟؟ هيا ..

    كود:
    
    
    كود:
    select hiredate , next_day(hiredate,'الجمعة') from emp ;

    والنتيجة ...

    كود:
    
    
    كود:
    HIREDATE NEXT_DAY
    -------- --------
    17/12/80 19/12/80
    20/02/81 27/02/81
    22/02/81 27/02/81
    02/04/81 03/04/81
    28/09/81 02/10/81
    01/05/81 08/05/81
    09/06/81 12/06/81
    19/04/87 24/04/87
    17/11/81 20/11/81
    08/09/81 11/09/81
    23/05/87 29/05/87
    03/12/81 04/12/81
    03/12/81 04/12/81
    23/01/82 29/01/82

    ممممم .... الدالة التالية ...

    الدالة :
    LAST_DAY

    العمل :
    توجد تاريخ اخر يوم من شهر ما ,,

    الأمثلة :
    هل تذكر حينما قلت لك تاريخ الجمعة القادم وكان في 6/1/2006 ؟؟
    لماذا لم يكن في 7/1/2006 ؟؟ لان الشهر الحالي .. كان 31 يوما ...
    اريد ان اعرف كم عدد ايام الشهر الحالي .. هل صحيح 31 يوما ؟؟؟

    كود:
    
    
    كود:
    select last_day(sysdate) from dual ;


    اليك النتيجة
    كود:
    
    
    كود:
    LAST_DAY
    --------
    31/12/05

    .... صح ,,
    ممممم .. لا توجد أمثلة في رأسي لهذه الدالة ... ولكن فكر انت لماذا عملت هذه الدالة ...

    المهم اعتقد انه يوجد دالتين للتاريخ ... ولكن لما طبقتهم .. لم يستجيبوا معي .... لا اعرف لماذا ولكن ... اعتقد لأن المنهج قديم ؟؟ لا اعرف .. وكأنه يستخدم إصدار قديم للأوراكل ... انسى أمرهما الان ,,,,

    د- دوال لأغراض التحويل
    Conversion Functions

    انتهينا من الدوال الحرفية .. والدوال الرقمية .. ودوال التاريخ ...
    والان نحن سنغطي دوال مهمة وهي دوال التحويل
    وبعدها سوف ننتهي من الدوال الاحادية الصفوف ,,
    اريدك ان تعرف الان جزئية مهمة جدا ...
    كم نوع من البيانات موجودة في الأوراكل ؟؟ (ما معنى البيانات ؟؟ راجع الدرس الخامس !!)
    الان وفي الوقت الحالي ... اريدك ان تعرف ثلاث ..
    حرفية (أو نصية
    )..... و رقمية ..... و تواريخ ,,,

    اريدك ان تعرف ان النص = مجموعة حروف .....
    الان بالله عليك قلي ... هذا النوع (11/10/1999) ما
    هو ؟؟؟

    تاريخ ؟؟ خطأ !!
    نص ؟؟ خطأ !!!
    رقم ؟؟؟ خطأ !!!
    هذا يا حبيبي من الممكن يكون تاريخ ومن الممكن يكون نص !! لا احد يعرف !!
    طبعا مستحيل يكون رقمي .. لأنه يوجد هذا الحرف / ,,
    قلنا من قبل ان التواريخ تشبه النصوص .. ولكن النصوص لا تشبه التواريخ !! كيف ؟ انا أخبرك
    ,,

    النص = حروف أبجدية + حروف اخرى + أرقام حرفية !!
    لاحظ انه يوجد فرق بين الأرقام الحرفية والأرقام الرقمية ... الأرقام الحرفية للعرض فقط كنص !! اذا لم تفهم .. تجاهل الموضوع الان


    المهم ... الحروف الأبجدية .. مثلا بالانجليزي
    ABC…..abcd….. .....الخ ..

    الحروف الأخرى هي مثل / * - + _=)(>&<......... الخ
    هل فهمت معنى النص !!
    كيف يعرف برنامج الأوراكل ان هذا نص .. وهذا رقم .. وهذا تاريخ ؟؟
    بسيطة .. مثلا هذا نص
    'abc_545' ,,, كيف عرف ؟ من علامتي التنصيص الأحادية !!

    ونفس الفكرة للتاريخ ولكن للتواريخ أشكال معينة ستعرفها الان ...

    نرجع الى دوال التحويل ..
    أي رقم في الدنيا
    ... بإمكاننا ان نحوله نص صح ؟؟

    أي تاريخ في الدنيا ... بإمكاننا ان نحوله نص صح ؟؟؟
    لكن ....
    ليس كل نص يصبح رقم .. وليس كل نص يصبح تاريخ !!
    سوف تشاهد الدوال وتعرف ما كنت اقصده !!


    التعديل الأخير تم بواسطة The Coder ; 04-01-2006 الساعة 09:42 PM

  15. #60
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء


    الدالة :
    TO_NUMBER

    العمل :
    تحويل نص الى رقم ..... بمعنى اخر تحويل الأرقام الحرفية الى أرقام حسابية

    الأمثلة :
    قبل ان تستخدمها ... هل تتوقع لو ادخلنا النص التالي "
    SYUTYRE123" هل سيتحول الى رقم ؟

    طبعا لا ...

    لانه يوجد حروف ابجدية ......

    لو ادخلنا النص التالي "
    7894" هل سيتحول هذا النص الى رقم ؟؟ نعم بالطبع .. سيتحول الى 7894 ,,

    اذن يجب ان يكون النص المدخل حروفه ارقام حرفية فقط!!

    هل تذكر
    EMPNO ؟؟ وهو رقم الموظف !!

    هل هو نوع رقمي ام حرفي ؟؟

    هو نوع رقمي !! يعني لو ادخلنا
    h456 كرقم للموظف .. فسيعطي خطأ !!

    تخيل لو انه نوع حرفي ... هل يصح ؟؟؟ طبعا يصح ,, لأن النصوص بإمكانها ان تكون ارقام فقط !!

    الان لو قلنا ...


    كود:
    
    
    كود:
    select job+1 from emp ;


    مع العلم ان الـ
    JOB نوع نصي وليس رقمي .. بالله عليك كم نتيجة عمل+1 = ؟؟؟

    خطأ في خطأ !!

    كيف نضيف الى العمل الرقم واحد ؟؟؟ النص للعرض وليس للحساب !!

    هل عرفت ان هذه حركة غبية ؟؟

    لو ان الحقل
    EMPNO نوع نصي ... تخيل ذلك ...

    ونريد ان نعمل بعض الحسابات ... هل نستطيع ؟ طبعا لا ...

    الان ..

    تخيل لو ان
    EMPNO حقل نصي (بالخطأ صار حقل نصي )

    اريد اعرض أرقام الموظفين جميعهم ولكن مضاف إليها 100 مثلا !! ماذا نعمل ؟؟

    نحول حقل
    EMPNO النصي الى أرقام حسابية ... باستخدام الدالة TO_NUMBER

    بدلا ان نقول ....
    كود:
    
    
    كود:
    select empno+100 , empno from emp ;

    والتي تعتبر خاطئة اذا ما اعتبرنا ان حقل
    EMPNO حقل نصي .... نقول ..

    كود:
    
    
    كود:
    select TO_NUMBER(empno)+100 , empno from emp ;


    والنتيجة .
    ..



    كود:
    
    
    كود:
    TO_NUMBER(EMPNO)+100 EMPNO -------------------- ---------- 7469 7369 7599 7499 7621 7521 7666 7566 7754 7654 7798 7698 7882 7782 7888 7788 7939 7839 7944 7844 7976 7876 8000 7900 8002 7902 8034 7934


    مثلا

    اريد ان اعرض معلومات صاحب الرقم 7782
    + 6 .... مثلا ,,, ماهي الجملة ؟؟


    كود:
    
    
    كود:
    select * from emp where empno=7782+6 ;

    تخيل لو ان
    EMPNO حقل نصي (بالخطأ صار حقل نصي ) .. .. هل جملة الاستعلام السابقة صحيحة ؟؟ طبعا لا .. ليست صحيحة !!

    ماذا نعمل ؟؟

    نحول حقل
    EMPNO النصي الى أرقام حسابية ... باستخدام الدالة TO_NUMBER

    كود:
    
    
    كود:
    select * from emp where TO_NUMBER(empno)=7782 + 6 ;

    هل فهمت شيء ؟

    يعني حول قيمة
    empno النصية الى قيمة رقمية !! هذا كل شيء ....

    لا ارى تلك الأهمية لهذه الدالة ... ولا يوجد لدي في الوقت الراهن أي تطبيقات قوية لها ,,,


    الدالة :
    TO_DATE

    العمل :
    تحول نص الى وقت أو تاريخ ... مع العلم ان النص المدخل يجب ان يكون مكتوب بصيغة معينة

    الأمثلة :
    قبل البدء اريدك ان تعرف ان ...
    Y
    تعني سنة ... اختصار لـ Year

    M
    تعني شهر ... اختصار لـ Month

    D
    تعني يوم ... اختصار لـ DAY

    MI
    تعني دقيقة ... اختصار لـ Minute

    H
    تعني ساعة ... اختصار لـ Hour

    S
    تعني ثانية ... اختصار لـ Second



    طيب ...

    الموظف
    WARD ... لا اعرف متى ولد .. ولكن اعرف تاريخ تعيينه وهو 22 من شهر فبراير من عام 1981 م ....

    اذا قلت لك اريد تاريخ الموظف
    WARD بهذا الشكل ... (اقرأ من اليسار الى اليمين)

    DD-MM-YY .....
    مالذي تتوقعه ؟؟ هل تعرف ؟؟

    يعني هكذا
    22-02-81
    واذا قلت لك .... اريد تاريخه بهذا الشكل ... (اقرأ من اليسار الى اليمين)
    DD/MM/YYYY
    كيف نكتبها ؟

    نكتبها هكذا :
    22/02/1981

    لاحظ انه لا فرق بين / و بين - فكلاهما لهما غرض واحد ,,

    لو اردنا تاريخه بهذه الصيغة ...
    MM/SS/YY
    فإن التاريخ يكتب هكذا ...
    02/22/81

    فهمت الفكرة ؟ يعني الفكرة هي التاريخ يجب ان يكون على الشكل المطلوب ....

    يعني يجب ان يطابق التاريخ الشكل ... تذكر هذا جيدا !! يجب ان يطابق التاريخ الشكل !!!!

    مثل الشكل ..
    DD/MM فإن التاريخ يكون 22/02

    مثلا الشكل
    MM فإن التاريخ هكذا .. 02 ,,,



    الان ... فكر كم شكل للتاريخ ؟؟ ثلاث أشكال ؟ خمس ؟ عشرون ؟؟

    صراحة ... كثير ... وبالكيفية التي تريدها !!

    تريد الايام ثم السنوات ثم الشهور ....

    تريد شهور والسنوات فقط , جرب ما يحلوا لك ....

    أحب ان أشير الى نقطة .. انه في بعض الأحيان ... نريد اسماء الشهور و الايام ...

    مثلا اريد عرض معلومات الموظف الذي تم تعيينه في يوم الأحد في شهر فبراير في سنة 1981 م ....

    أي التاريخ (من الشمال الى اليمين
    ):

    SUNDAY FEBRUARY 1981

    فإن الشكل ... هو(من الشمال الى اليمين ) :
    DAY MONTH YYYY

    DAY
    يعني يوم ... MONTH تعني شهر ,,,

    هل رأيت كيف طابق التاريخ الشكل ؟؟؟

    الان نبدأ مع هذه الدالة ...

    تحول هذه الدالة نص على شكل معين .. الى تاريخ !!

    وحتى الان لا ارى في هذه الدالة .. ودالة
    TO_NUMBER تلك الأهمية .. ولا اعرف لماذا عملوها اصلا ....

    وجدت مثال واحد في منهجين مختلفين !! مثال غبي ...

    الان اريد عرض معلومات الموظف الذي تاريخ تعيينه
    22/02/1981



    كود:
    
    
    كود:
    select * from emp where hiredate=to_date('22/02/1981','dd/mm/yyyy') ;

    وسوف تعرض نتيجة الموظف
    WARD الذي تحدثنا عنه قبل قليل ,,

    الدالة تأخذ في المدخل الأول التاريخ بشكل نص , والمدخل الثاني شكل التاريخ , يجب ان يكون التاريخ مطابق للشكل ,,

    اعتقد ان هذه الدالة .. تفي بالغرض عندما لا اعرف كيف تخزن التاريخ في قاعدة البيانات ..

    يعني انا شخصيا .. التواريخ كتبت لي هكذا
    DD/MM/YY

    وفي احد المناهج .. لاحظت ان التواريخ كتبت عنده هكذا
    DD/MM/YYYY

    يعني مثلا اريد عرض معلومات الموظف الذي تعين في : فبراير 22/1981

    ولا اعرف كيف تخزن .. فاجبر ان تكون النتيجة بشكل انا ارغبه ... ,,

    مثلا الشكل
    MONTH , DD YYYY

    ما جملة الاستعلام اللازمة ؟؟

    كود:
    
    
    كود:
    select * from emp where hiredate=to_date('February 22,1981' ,'month dd , yyyy') ;

    وسوف تعرض معلومات الموظف
    WARD

    وظهرت لي مشاكل .. متعلقة بالعربي والانجليزي ....

    فجهازي عربي خالص ... بدل ان اقول
    February 22,1981 اقول "فبراير 22 , 1981"

    وسوف تجد شكلها غبي جدا وغير مرتبة لان الاوراكل ببساطة انجليزي خالص ,,

    المهم ... هل تصدق ان المثال السابق هو المثال الوحيد الذي وجدته !!

    المشكلة لا تكمن هنا .. المصيبة انه
    ... بدلا من الجملة ...

    كود:
    
    
    كود:
    select * from emp where hiredate=to_date('22/02/1981','dd/mm/yyyy') ;

    استطيع القول وبدون الدالة ...

    كود:
    
    
    كود:
    select * from emp where hiredate='22/02/1981';

    لماذا هذه الدالة ؟؟؟

    هل لأجل كتابة فبراير كاملة ... ام لأجل ماذا ؟؟

    في دراستي الجامعية سابقا ... أتذكر ان دكتور مادتنا .. قال لنا "تجاهلوا موضوع التواريخ ... ليست في المقرر"

    اعتقد انه رأى عدم أهمية أشكال التواريخ !! ... اعتقد ذلك ,

    لذا ... فسوف أتجاهل هذه الدالة ,, وحتى إشعار اخر !
    !



    الان اليك دالة قوية جدا !!
    الدالة :
    TO_CHAR

    العمل :
    تحويل الرقم الى نص .. وتحويل التاريخ الى نص !!

    الأمثلة :
    لماذا هذه الدالة ؟ لعرض التواريخ والارقام بالأشكال التي نرغبها ,,

    لها مدخلان ....(
    2 Parameters)

    المدخل الاول ... يفترض بأن يكون به .. يا رقم .. او تاريخ ...

    المدخل الثاني ... يفترض بأن يكون نص !!

    اذا كان المدخل الاول رقم .. فسوف يتم تحويله الى نص .....

    اذا كان المدخل الاول تاريخ .. فسوف يتم تحويله الى نص ...

    - اولا تحويل الرقم الى نص ....

    اذا كان المدخل الاول رقم .. فسوف يتم تحويله الى نص ..
    ...

    رواتب الموظفين على سبيل المثال ستعرض هكذا ...
    1000

    3500

    90000

    1000000
    صح ؟

    اريد عرضها هكذا ..
    $1000

    $3500

    ….
    او ... اريد عرضها هكذا ...
    1000.00

    3500.00

    …..
    او اريدها هكذا ....
    $1,000

    $1,000,000

    ….
    او هكذا ...
    $1,000.00

    $1,000,000.00
    لاحظ الفرق بين الفاصلة العشرية (النقطة)والفاصلة الكتابية (التي شكلها هكذا , )

    أو اريد اعقد شكل وهو ..
    $00,001,000.00

    $00,003,500.00

    $01,000,000.00
    هل شاهدت هذا التعقيد !!

    بل اريدها اربع ارقام يمين الفاصلة العشرية !!
    $00,001,000.0000

    $00,003,500.0000

    $01,000,000.0000


    مالذي اعمله ؟؟

    باستخدام دالة تحويل الارقام الى نص .. نستطيع ان نعمل هذه الاشكال ...

    اسمعني جيدا .. في هذه الدالة لا تستطيع ان تضع الا ثلاث حروف ,’,’,’,’,’,’,’

    النقطة وهي الفاصلة العشرية

    والفاصلة الحرفية

    و علامة الدولار
    $

    فقط !!

    اريد ان اعرض الرواتب على هذا الشكل ...
    $1000

    $3500

    $10000
    لاحظ الراتب الاخير .. زائد بخانة عن بقية الرواتب ...

    وهو اكبر الرواتب صح ؟؟

    بالله عليك توقع معي .. كم اكثر عدد للخانات ؟؟

    5 خانات .. وهو يمثل عدد خانات اكبر راتب ... 10000

    اذن انظر جيدا كيفية استعمال الدالة ...

    كود:
    
    
    كود:
    select to_char(sal,'$9999') from emp ;

    اوبس !! ... ماهذه التسعات ؟؟ ولماذا ؟؟

    معنى
    $9999 أي اعرض لي الراتب sal على هذه الصيغة ...

    يعني لو
    1000 اجعلها $1000

    طيب لو
    500 اجعلها $500 كما هي

    طيب لو
    1 اجعلها $1 كما هي ,,,

    طيب لو
    10000 هنا يظهر خطأ .... ولن تعرض شيء .. لماذا ؟؟ لأننا وضعنا 4 تسعات .. أي اربع خانات فقط

    والعشرة الاف خمس خانات !! فيجب الحذر ,,

    اليك النتيجة ^^



    كود:
    
    
    كود:
    TO_CHA ------ $800 $1600 $1250 $2975 $1250 $2850 $2450 $3000 $5000 $1500 $1100 $950 $3000 $1300


صفحة 4 من 12 الأولىالأولى 123456789 ... الأخيرةالأخيرة

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •