المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : الدرس التاسع إستعراض البيانات لإي أوراكل جزء 3 الدوال



skybird6114
16-11-2011, 10:02 AM
استعراض البيانات في أوراكل – جزء 3 – إستخدام الدوال

* * * * *الدوال * * * * *
الدوال أو كما يسميها البعض الوظائف كما يطلقون عليها فانكشن من الكلمة الإنجليزية لها function وهي وظائف تضاف مع الأوامر لتحقيق هدف ما.
الوظائف(الدوال) موجودة في جميع لغات البرمجة و لها إستخدامات و فوائد هامة كثيرة كما سوف نرى.
لتوضيح الامر نذكر المثال التالي :
إذا طلب منك عدد العاملين المسجلين بقاعدة البيانات سيكون الرد الامر بسيط سوف استخدم الامر SELECT و سوف يظهر عدد السجلات بعد استعراض جميع السجلات
و لكن أقول لك إذا كان عدد السجلات كبيرا جدا بالالاف و ربما عشرات و مئات الالاف فسوف يكون الامر صعب جدا.
و أصعب من ذلك ما هو مجموع رواتب العاملين ... ستعجز عن الرد و لو استخدمت الطريقة اليدوية لا أدري كم من الوقت يكفيك للرد و غيرها الكثير ...
الحل بسيط و هو استخدام الدوال و هي تتشابه كثيرا في معظم لغات البرمجة.

تتميز الوظائف بالشكل المتميز التالي


(Function(argument
كما نلاحظ إسم الوظيفة يليه قوسان و بينهما ما يسمى معاملات الوظيفة و يمكن للمعاملات أن تكون لا شئ أي أقواس خالية في بعض الوظائف.
و الوظائف في اللغات كثيرة جدا و تكون أعدادها ربما أكثر من أوامر اللغة.
لهذا تصنف الوظائف إلى مجموعات طبقا لطبيعة الإستخدام

على سبيل المثال الوظائف المتعلقة بالتاريخ تسمى وظائف التاريخ و هكذا و نظرا لأن عدد الوظائف كبير فقد قمنا هنا بإختيار ما نراه اهم الوظائف التي يحتاج إليها المستخدمون و نترك الباقي لمراحل لاحقة أو إجتهد لمعرفة باقي الوظائف

الوظائف العددية(الرقمية) - Number Functions
وهذه الوظائف لن نخوض فيها كثيرا لخصوصيتها لمن يتعاملون معها و هم يعرفون المعنى الرياضي لها و لكن سأشرح منها ما أرى إحتياج العامة له
(ABS(n : لحساب القيمة المطلقة للعدد n
كما توجد جميع دوال حساب المثلثات مثل SIN / COS / وغيرها الكثير
(LN(n: حساب اللوغاريتم الطبيعي
(SQRT(n : حساب الجذر التربيعي
(ROUND(n,m : وتسمى دالة التقريب العشري وتعمل على تقريب الكسور العشرية للعدد n بالطول m.
*** إذا كانت m هي الرقم 2 و تعني أن يتم تقريب الأعداد بعد العلامة العشرية إلى رقمين.
*** إذا كانت m هي صفر و تعني تقريب جميع الكسور العشرية و يصبح العدد صحيح بدون كسور عشرية.
*** إذا كانت m هي واحد و تعني أن يتم تقريب الكسور العشرية إلى رقم واحد فقط بعد العلامة العشرية.
و الأمثلة التالية توضح ذلك :
ملحوظة هامة :
نحتاج لأمر إستعراض البيانات وهو الأمر SELECT و لكن مع هذا الأمر يجب ذكر إسم الجدول المطلوب الحصول على البيانات منه و هنا ليس لدينا جدول محدد للعمل عليه. و لذا سوف نستخدم إضافة جديدة مع الأمر وهي الجدول الوهمي أو الإفتراضي DUAL. و سنرى طريقة الإستخدام في الأمثلة التالية. لتطبيق هذه الأمثلة
****************
http://www.geek4arab.com/vb/imgcache/2/18439_geek4arab.com.jpg
=============================================
(TRUNC(n,m : وتسمى دالة الإستبعاد حيث تبقي على العدد بدون التقريب
*** هذه الدالة تختلف قليلا عن ROUND حيث تقوم بحذف الكسور دون تقريب و المثال التالي يوضح ذلك
حيث الرقم 4 كما هو و لم يتم تقريب الرقم 6 إليه أنظر المثال السابق و لاحظ الفرق.

http://www.geek4arab.com/vb/imgcache/2/18440_geek4arab.com.jpg
==================================
الوظائف الحرفية (النصية) Character Functions

INITCAP(string) تحويل الحرف الأول من الكلمة إلى حروف كبيرة

http://www.geek4arab.com/vb/imgcache/2/18441_geek4arab.com.jpg

LOWER(string) : تحويل الحروف الكبيرة إلى حروف صغيرة
**** وهذه الدالة مع الدالة التالية هامة جدا عند إستقبال بيانات من مستخدم ربما يقوم بخلط الحروف الكبيرة و الصغيرة معا عند إدخال البيانات باللغة الإنجليزية.

http://www.geek4arab.com/vb/imgcache/2/18442_geek4arab.com.jpg

UPPER(string) : تحويل الحروف الصغيرة إلى حروف كبيرة

LENGTH(string) : إيجاد عدد الحروف التي يتكون منها النص
لاحظ في هذا الأمر أنه تم إحتساب المسافات كحروف

http://www.geek4arab.com/vb/imgcache/2/18443_geek4arab.com.jpg

TRIM(string) : حذف المسافات الزائدة يمين و يسار النص


http://www.geek4arab.com/vb/imgcache/2/18444_geek4arab.com.jpg

*** لاحظ أن طول النص قد قل بعدد المسافات يمينا و يسارا و انتبه لطريقة إستخدام وظيفتين معا من حيث فتح و إغلاق الأقواس و عدد الأقواس المفتوحة و المغلقة

LTRIM(string) : حذف المسافات الزائدة يسار النص

http://www.geek4arab.com/vb/imgcache/2/18445_geek4arab.com.jpg

RTRIM(string) : حذف المسافات الزائدة يمين النص


CONCAT(string1,string2) :
إضافة النص الأول إلى النص الثاني ليتكون نص جديد من لصق النصين جنبا إلى جنب.
لاحظ إلتصاق الإسم مع الوظيفة و لكن ليبدو النص بشكل جيد نحتاج مسافة للفصل بين الإسم و الوظيفة
و المشكلة هنا أن هذه الوظيفة لها معاملان فقط و لكن الحل بسيط و هذا يوضح أننا نحتاج للتفكير لإيجاد الحلول و لذلك سنستخدم الدالة مرتين في الأولى نضيف مسافة للإسم و المرة الثانية نضيف لها الوظيفة ليصبح بينهما مسافة كما بالمثال التالي. إنتبه دائما لإستخدامات الأقواس لأنها غالبا سبب حدوث الأخطاء

http://www.geek4arab.com/vb/imgcache/2/18446_geek4arab.com.jpg

http://www.geek4arab.com/vb/imgcache/2/18447_geek4arab.com.jpg


(SUBSTR(string1,start,length : نقوم بقص جزء من النص بداية من الرقم start بالطول length

http://www.geek4arab.com/vb/imgcache/2/18448_geek4arab.com.jpg

*************************************************
وظائف التحويل (CONVERSION FUNCTIONS):
*** هذه الوظائف تستخدم للتحويل من أحد أنواع البيانات الى نوع آخر ( إن أمكن ذلك).
*** لماذا كلمة إن أمكن ذلك : يمكن تحويل عدد الى نص. يمكن تحويل تاريخ الى نص ولكن ......
*** هل يمكن تحويل أى نص إلى تاريخ !!!! هل يمكن تحويل أى نص إلى عدد رقمي !!!!
*** يمكن تحويل النص لتاريخ إذا كان على شكل تاريخ أو وقت فقط.
*** يمكن تحويل نص إلى رقم يستخدم في الحساب إذا كان بشكل عددي فقط.
*** مثال للتوضيح : إذا كان لدينا حقل يحتوي العمر هذا الحقل يمكن أن يكون عدد و يمكن أن يكون نص.
*** : إذا كان لدينا حقل يحتوي تاريخ الميلاد يمكن تحويله الى نص
*** و لكن لدينا حقل يحتوي الوظيفة في هذه الحالة لا يمكن تحويله الى عدد و لايمكن تحويله الى تاريخ.

***( TO_CHAR(arg تستخدم هذه الدالة لتحويل التاريخ أو الوقت أو الاعداد الى نص.
*** أمثلة :
http://www.geek4arab.com/vb/imgcache/2/18449_geek4arab.com.jpg
***( TO_NUMBER(arg تستخدم هذه الدالة لتحويل النص بين القوسين إلى قيمة عددية يمكن إستخدامها فى عمليات حسابية.
*** TO_DATE(arg) تستخدم هذه الدالة لتحويل النص بين القوسين إلى تاريخ.
================================================== ======
وظائف التاريخ و الوقت :
*** SYSDATE
**من الوظائف الهامة حيث تستخدم لمعرفة التاريخ و الوقت.
http://www.geek4arab.com/vb/imgcache/2/18450_geek4arab.com.jpg
*** (MONTHS_BETWEEN(d1,d2 *** لحساب عدد الشهور بين تاريخين.
http://www.geek4arab.com/vb/imgcache/2/18451_geek4arab.com.jpg
الوظائف الإحصائية (Aggregate Function):
******************************************
*** من أهم الوظائف التى نحتاج إليها كما سنرى بالأمثلة التالية :
****() COUNT : تستخدم لإيجاد عدد السجلات
*** مثل عدد العاملين بأحد الفروع أو عدد العاملين براتب 1000 مثلا و هكذا كما سنرى بالأمثلة :
http://www.geek4arab.com/vb/imgcache/2/18452_geek4arab.com.jpg
و الآن هناك إضافة جديدة و هامة جدا و هي ما عدد العاملين في كل قسم.
هنا نحتاج لإضافة جديدة للأمر SELECT و هي الإختيار GROUP BY و هي إضافة للأمر و تعني تقسيم البيانات إلى مجموعات طبقا للحقل الذي يتم تحديده و من ثم إيجاد العدد لكل مجموعة. و بنفس الطريقة يمكن إيجاد المجموع و المتوسط و أكبر و أصغر عدد للدوال الأخرى.
مثال توضيحي ما هو عدد العاملين بكل قسم من الأقسام. يمكن تكرار الأمر COUNT عدة مرات بعدد الأقسام و لكن يكون من الصعب جدا تنفيذ ذلك مع عدد كبير من الأقسام. و لهذا نحتاج للإضافة الجديدة GROUP BY.
و الآن لإيجاد عدد العاملين بكل قسم نستخدم الأمر التالي ثم نقوم بالتوضيح :

http://www.geek4arab.com/vb/imgcache/2/18453_geek4arab.com.jpg

كما ترى لقد قام الأمر آليا بتقسيم الأقسام إلى مجموعات و قام بإيجاد عدد العاملين بكل مجموعة.
و الآن لمزيد من التوضيح ما عدد العاملين بكل وظيفة :


http://www.geek4arab.com/vb/imgcache/2/18454_geek4arab.com.jpg

----() SUM : إيجاد المجموع مثل مجموع مرتبات العاملين أو مجموع درجات طابب و غيرها .....
http://www.geek4arab.com/vb/imgcache/2/18455_geek4arab.com.jpg
بنفس الطريقة السابقة يمكننا إيجاد مجموع مرتبات العاملين بكل قسم :


http://www.geek4arab.com/vb/imgcache/2/18456_geek4arab.com.jpg

مع رجاء ملاحظة أنه في حالة COUNT لم يكن من المهم ذكر إسم الحقل لأن العدد يكون للسجلات أما في حالة الدوال الباقية مثل SUM / MIN / MAX / AVG يجب تحديد الحقل المطلوب إيجاد المجموع أو المتوسط أ, أكبر أو أصغر قيمة له بين قوسي الدالة كما بالمثال التالي :

### ()AVG : لإيجاد المتوسط الحسابي مثل متوسط أعمار العاملين أو متوسط درجات الطلاب و غيرها .

http://www.geek4arab.com/vb/imgcache/2/18457_geek4arab.com.jpg

***() MAX : لإيجاد أكبر رقم مثل أكبر درجة من درجات الطلاب لمعرفة المتفوقين أو راتب أكبر عامل


http://www.geek4arab.com/vb/imgcache/2/18458_geek4arab.com.jpg
حاول التدريب على الإختيار GROUP BY لإيجاد أكبر و أصغر مرتب بكل قسم.
===() MIN: إيجاد أصغر رقم و هي عكس الدالة السابقة.


http://www.geek4arab.com/vb/imgcache/2/18459_geek4arab.com.jpg
***************************************
هذه ليست كل الوظائف و لكن أهم الوظائف الموجودة و هناك المزيد ربما نتعرض له إذا دعت الحاجة لإستخدامه

http://file7azm.info/do.php?img=807