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

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



skybird6114
11-17-2011, 08:44 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://farm7.static.flickr.com/6236/6347429036_175407875c.jpg
=============================================
(TRUNC(n,m : وتسمى دالة الإستبعاد حيث تبقي على العدد بدون التقريب
*** هذه الدالة تختلف قليلا عن ROUND حيث تقوم بحذف الكسور دون تقريب و المثال التالي يوضح ذلك
حيث الرقم 4 كما هو و لم يتم تقريب الرقم 6 إليه أنظر المثال السابق و لاحظ الفرق.

http://farm7.static.flickr.com/6055/6347429080_8024606899.jpg
==================================
الوظائف الحرفية (النصية) Character Functions
INITCAP(string) تحويل الحرف الأول من الكلمة إلى حروف كبيرة
http://farm7.static.flickr.com/6223/6347429100_48c3c66514.jpg

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

http://farm7.static.flickr.com/6047/6346678797_f79fbd2c4f.jpg

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

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

http://farm7.static.flickr.com/6211/6347429182_fa1f0530c1.jpg

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


http://farm7.static.flickr.com/6032/6347429206_6c4947a9b3.jpg

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

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

http://farm7.static.flickr.com/6038/6346678895_11a41f03e1.jpg

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


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

http://farm7.static.flickr.com/6115/6347429300_97f88e9e4c.jpg

http://farm7.static.flickr.com/6037/6347429314_4b3f01b4e9.jpg


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

http://farm7.static.flickr.com/6044/6347429340_52a569817b.jpg

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

***( TO_CHAR(arg تستخدم هذه الدالة لتحويل التاريخ أو الوقت أو الاعداد الى نص.
*** أمثلة :
http://farm7.static.flickr.com/6049/6347578958_e812d4529a_b.jpg
***( TO_NUMBER(arg تستخدم هذه الدالة لتحويل النص بين القوسين إلى قيمة عددية يمكن إستخدامها فى عمليات حسابية.
*** TO_DATE(arg) تستخدم هذه الدالة لتحويل النص بين القوسين إلى تاريخ.
========================================================
وظائف التاريخ و الوقت :
*** SYSDATE
**من الوظائف الهامة حيث تستخدم لمعرفة التاريخ و الوقت.
http://farm7.static.flickr.com/6234/6346828727_1ce3f1a95c_z.jpg
*** (MONTHS_BETWEEN(d1,d2 *** لحساب عدد الشهور بين تاريخين.
http://farm7.static.flickr.com/6051/6347579022_fc2c198e45_z.jpg
الوظائف الإحصائية (Aggregate Function):
******************************************
*** من أهم الوظائف التى نحتاج إليها كما سنرى بالأمثلة التالية :
****() COUNT : تستخدم لإيجاد عدد السجلات
*** مثل عدد العاملين بأحد الفروع أو عدد العاملين براتب 1000 مثلا و هكذا كما سنرى بالأمثلة :
http://farm7.static.flickr.com/6047/6346828791_0f2819d3e5.jpg
و الآن هناك إضافة جديدة و هامة جدا و هي ما عدد العاملين في كل قسم.
هنا نحتاج لإضافة جديدة للأمر SELECT و هي الإختيار GROUP BY و هي إضافة للأمر و تعني تقسيم البيانات إلى مجموعات طبقا للحقل الذي يتم تحديده و من ثم إيجاد العدد لكل مجموعة. و بنفس الطريقة يمكن إيجاد المجموع و المتوسط و أكبر و أصغر عدد للدوال الأخرى.
مثال توضيحي ما هو عدد العاملين بكل قسم من الأقسام. يمكن تكرار الأمر COUNT عدة مرات بعدد الأقسام و لكن يكون من الصعب جدا تنفيذ ذلك مع عدد كبير من الأقسام. و لهذا نحتاج للإضافة الجديدة GROUP BY.
و الآن لإيجاد عدد العاملين بكل قسم نستخدم الأمر التالي ثم نقوم بالتوضيح :

http://farm7.static.flickr.com/6055/6349020427_778f813a6a.jpg

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


http://farm7.static.flickr.com/6239/6349768918_69577896d4.jpg

----() SUM : إيجاد المجموع مثل مجموع مرتبات العاملين أو مجموع درجات طابب و غيرها .....
http://farm7.static.flickr.com/6236/6346828819_247f628203.jpg
بنفس الطريقة السابقة يمكننا إيجاد مجموع مرتبات العاملين بكل قسم :


http://farm7.static.flickr.com/6226/6349769132_1066492ca6.jpg

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

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

http://farm7.static.flickr.com/6223/6347579100_b674bd6a2f.jpg

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


http://farm7.static.flickr.com/6230/6346828867_b0aafed391.jpg
حاول التدريب على الإختيار GROUP BY لإيجاد أكبر و أصغر مرتب بكل قسم.
===() MIN: إيجاد أصغر رقم و هي عكس الدالة السابقة.


http://farm7.static.flickr.com/6045/6346828905_30c52fcc7d.jpg
***************************************
هذه ليست كل الوظائف و لكن أهم الوظائف الموجودة و هناك المزيد ربما نتعرض له إذا دعت الحاجة لإستخدامه