End Google Ads 201810 - BS.net 01 --> استعراض البيانات في أوراكل – جزء 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. و سنرى طريقة الإستخدام في الأمثلة التالية. لتطبيق هذه الأمثلة
****************

=============================================
(TRUNC(n,m : وتسمى دالة الإستبعاد حيث تبقي على العدد بدون التقريب
*** هذه الدالة تختلف قليلا عن ROUND حيث تقوم بحذف الكسور دون تقريب و المثال التالي يوضح ذلك
حيث الرقم 4 كما هو و لم يتم تقريب الرقم 6 إليه أنظر المثال السابق و لاحظ الفرق.


==================================
الوظائف الحرفية (النصية) Character Functions
INITCAP(string) تحويل الحرف الأول من الكلمة إلى حروف كبيرة


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



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

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



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




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

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



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


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






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



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

***( TO_CHAR(arg تستخدم هذه الدالة لتحويل التاريخ أو الوقت أو الاعداد الى نص.
*** أمثلة :

***( TO_NUMBER(arg تستخدم هذه الدالة لتحويل النص بين القوسين إلى قيمة عددية يمكن إستخدامها فى عمليات حسابية.
*** TO_DATE(arg) تستخدم هذه الدالة لتحويل النص بين القوسين إلى تاريخ.
========================================================
وظائف التاريخ و الوقت :
*** SYSDATE
**من الوظائف الهامة حيث تستخدم لمعرفة التاريخ و الوقت.

*** (MONTHS_BETWEEN(d1,d2 *** لحساب عدد الشهور بين تاريخين.

الوظائف الإحصائية (Aggregate Function):
******************************************
*** من أهم الوظائف التى نحتاج إليها كما سنرى بالأمثلة التالية :
****() COUNT : تستخدم لإيجاد عدد السجلات
*** مثل عدد العاملين بأحد الفروع أو عدد العاملين براتب 1000 مثلا و هكذا كما سنرى بالأمثلة :

و الآن هناك إضافة جديدة و هامة جدا و هي ما عدد العاملين في كل قسم.
هنا نحتاج لإضافة جديدة للأمر SELECT و هي الإختيار GROUP BY و هي إضافة للأمر و تعني تقسيم البيانات إلى مجموعات طبقا للحقل الذي يتم تحديده و من ثم إيجاد العدد لكل مجموعة. و بنفس الطريقة يمكن إيجاد المجموع و المتوسط و أكبر و أصغر عدد للدوال الأخرى.
مثال توضيحي ما هو عدد العاملين بكل قسم من الأقسام. يمكن تكرار الأمر COUNT عدة مرات بعدد الأقسام و لكن يكون من الصعب جدا تنفيذ ذلك مع عدد كبير من الأقسام. و لهذا نحتاج للإضافة الجديدة GROUP BY.
و الآن لإيجاد عدد العاملين بكل قسم نستخدم الأمر التالي ثم نقوم بالتوضيح :



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




----() SUM : إيجاد المجموع مثل مجموع مرتبات العاملين أو مجموع درجات طابب و غيرها .....

بنفس الطريقة السابقة يمكننا إيجاد مجموع مرتبات العاملين بكل قسم :




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

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



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



حاول التدريب على الإختيار GROUP BY لإيجاد أكبر و أصغر مرتب بكل قسم.
===() MIN: إيجاد أصغر رقم و هي عكس الدالة السابقة.



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