والان لندخل بالدوال ((FUNCTIONS))
بصورة عامه الدالة هي :
هي داله لها اسم وتقوم بوظيفة معينة على البيانات الموجودة ثم تعود لنا بالنتيجة.
ملاحظة ... الداله تاخذ وسيط او اكثر ولكن النتيجة تكون قيمه واحدة فقط!
الدوال العددية ..
لناخذ اهمها وهي :
1-Round-------> وظيفتها تقريب الاعداد الكسريه الى اي قيمه عشرية تحدد للدالة
2-Trunc-------> وظيفتها قطع اي جزء عشري من الاعداد الكسرية بدون تقريب .
3- Mod--------> وظيفتها ايجاد باقي قسمة الاعداد الصحيحة.
امثلة عليها :
للداله (Round) :
Round(46.977.1)l
الناتج يكون :
46.98
للداله ( Trunc)
Trunc(46.977.1)l
الناتج يكون :
46.97
الداله (Mod)
Mod(1600.300)l
الناتج يكون :
1000
مثال اخر للتوضيح بشكل سريع :
اكتب استعلام لعرض اسماء ورواتب وعمولة الموظفين وباقي قسمة الرواتب والعمولات للموظفين الذين وظيفتهم 'salesman'؟
الحل :
select ename,sal,comm,mod(sal,com)l
from emp
where job= 'salesman';l
توضيح الحل :
1- اسماء الموظفين ونرمز لهم بالرمز ------->ename
2- رواتب الموظفين ونرمز له بالرمز --------> sal
3- عموله الموظفين ونرمز لها بالرمز -------> comm
4- باقي قسمة الرواتب والعمولات -----------> mod(sal,com)l
5- من جدول الموظفين ونرمز له بالرمز -----> emp
6- بشرط ! وهو ان نوجد باقي قسمة الرواتب والعمولات للمظفين الذين وظيفتهم 'salesman'; فقط !
الدوال الحرفية :
تعريفها ... هي دوال تأخذ وسائط (حرفية) وتعود بقيمة معينه حسب وظيفة كل دالة
ملاحظه .. يمكن النواتج تكون (حروف او ارقام )
الدوال الحرفيه تنقسم الى قسمين ..
أ- دوال التحويل
ب- دوال تناول البيانات
دوال التحويل :
1- lower
2- upper
3- intcap
دوال تناول البيانات وهي :
1- concat
2- substr
3- length
4- instr
5- lpad
ولنأخذ الان كل داله مع شرح مبسط لها :
1- lower-------> تحويل البيانات النصيه من حروف كبيره الى صغيره ( اي من A, الى a)
مثال على ذلك : اكتب استعلام يعرض اسماء الموظفين بحروف كبيره ؟
الحل :
select lower(ename)l
2- upper-------> تحويل البيانات النصيه من حروق صغيره الى حروف كبيره ( اي من aالى A)- عكس الـLOWER
مثال على ذلك:
اكتب استعلام يعرض اسماء الموظفين بحروف صغيره ؟
الحل :
select upper(ename)l
3- intcap------> تحويل اول حرف من البيانات النصيه الى حروف كبيرة وباقي الكلمه الى حروف صغيره( اي من eqlaاوAQLAالى Aqla)
مثال على ذلك:
اكتب استعلام يعرض اول حرف من الوظيفه بحرف كبير وبقيه الاحرف صغيره؟
الحل :
select intcap(job)l
دوال تناول البيانات
1- concat -------->تعني جمع سلسلتين نصيتين في عمود واحد
مثال على ذلك :
اكتب استعلام يعرض عمود الاسماء وعمود الوظائف في عمود واحد؟
الحل :
select concat(ename,job)l
2- substr------>تعني عرض حروف معينه من الكلمه تبداء من ارقام محدده
( يعني مثل اقول اطبع لي الكلمه من حرف رقم1 الى الحرف رقم 5 )
مثال على ذلك :
اكتب استعلام يعرض لنا الحروف منالحرف رقم 1 الى الحرف رقم 4؟
الحل :
select substr(job,1,4)l
3- length ------>تعني عدد الاحرف المكونه للكلمه
مثال على ذلك :
اكتب استعلام بعرض عدد احرف اسم كل موظف ؟
الحل :
select length(ename)l
4- instr------->تحديد مواقع الاحرف( يعني ممكن نحدد حرف نبيه من الكلمه ونقول له وين مكانه من الجمله؟
مثال على ذلك :
اكتب استعلام يوضح موقع الحرف 'Q' من كلمه اقلاع
الحل :
select instr(eqla,'q')l
لنأخذ امثله شامله لها :
مثال شامل-1- :اكتب استعلام يعرض اسماء الموظفين لحروف صغيره، واول حرف من الوظيفه كبير وبقية الاحرف صغيرة ،
وعدد احرف اسم كل موظف ، وضم عمودي الراتب والعمولة في عمود واحد ؟
الحل :
select lower(ename),initcap(job),length(ename),concat(sal,comm)l
from emp;l
مثال شامل -2- :اكتب استعلام لعرض اسماء الموظفين، واسمائهم ووظائفهم معاً، وعرض عدد حروف اسم كل موظف،:
وعرض موقع الحرف 'A' من اسماء الموظفين للموظفين الذين وظيفتهم SALESMAN؟
الحل :
select ename,concat(ename,job),length(ename),instr(ename,'A')l
from emp
where job='salesman';l
ملاحظات على الحل :
وجود شرط فيه !
دوال التاريـــــــــــــ 'DATE FUNCTION' ـــــخ
لمحه سريعه عنها:
يتم تخزين التاريخ في جدول يسمى الـDUAL لذلك يجب ان تتم عملية استرجاع التاريخ من الجدول
المسمى 'DUAL'
ودوال التاريخ هي :
1- الداله ........... SYSDATE
2- الداله ...........DAY_NEXT
3- الدالة ...........DAY_LAST
4- الدالة .....MONTHS_BETWEEN
لنشرحها بالتفصيل :
اولاً : الداله ........... SYSDATE
تعود بنا هذه الداله الى تاريخ اليوم الحالي
والشكل العام لها ....
select sysdate
from dual;l
ملاحظه : نلاحظ هنا وضعنا اسم الجدول dual;
مثال :
اكتب استعلام يعرض اسماء الموظفين وتواريخ تعينهم، ثم عرض تاريخ التعين +8 ايام، وعرض التاريخ- 7 ايام،
وعرض عدد الايام من تاريخ تعينه حتى التاريخ الحالي ؟
الحل :
select ename,hiredate,hiredate+8,hiredate-7,(sysdate-hiredat)l
from emp;l
2- الداله ...........DAY_NEXT
هذه الدالة تقوم بعرض اول تاريخ تالي للتاريخ المعطى.
الشكل العام لهذه الداله.
next_day(datecoloumn,dayname)l
ملاحظه ...
datecoloumn= التاريخ الموجود داخل الجدول ويوضع بين حاصرتين علويتين .
dayname =اسم اليوم المعطى ويجب وضعه بين حاصرتين علويتين.
مثال :
اذا كان التاريخ هو 1981/6/10 وطلب من الجهاز تحديد التاريخ الذي يصادف يوم الجمعه من نفس الشهر؟
الحل :
select next_day('10-june-81','friday');l
from dual;l
3- الدالة ...........DAY_LAST
نقصد بها ايجاد اليوم الاخير من كل شهر.
مثال :
اكتبي استعلام لعرض اليوم الاخير من شهر تعيين كل موظف ؟
الحل :
select last_day(hiredate)l
from emp;l
4- الدالة .....MONTHS_BETWEEN
نقصد بها ايجاد عدد الاشهر بين تاريخين يتم اعطائهم للدالة .
الشكل العام :
MONTHS_BETWEEN (date1,date2)l
ملاحظه ...
date1= التاريخ الاول او اسم العمود
date2=التاريخ الثاني او اسم العمود
مثال :
استعلام يعرض عدد الاشهر بين تاريخ التعيين والتاريخ الحالي ؟
الحل :
select MONTHS_BETWEEN( sysdate,hiredate)l
from emp;l
مثال شامل لدوال التاريخ :
استعلام لعرض رقم الموظف، تاريخ التعيين ، عدد الاشهر التي قضاها منذ تاريخ التعيين وتاريخ اول يوم جمعه بعد تعيينه،
واخر يوم من شهر تعيينه للموظفين الذين مر على تعيينهم اقل من 400 شهر ؟
الحل :
select empno,hiredate,months_between(sysdate,hiredate),next_date(hiredate,'friday),last_date(hiredate)l
from emp
where month_between(sysdate-hiredate<400);l
بصورة عامه الدالة هي :
هي داله لها اسم وتقوم بوظيفة معينة على البيانات الموجودة ثم تعود لنا بالنتيجة.
ملاحظة ... الداله تاخذ وسيط او اكثر ولكن النتيجة تكون قيمه واحدة فقط!
الدوال العددية ..
لناخذ اهمها وهي :
1-Round-------> وظيفتها تقريب الاعداد الكسريه الى اي قيمه عشرية تحدد للدالة
2-Trunc-------> وظيفتها قطع اي جزء عشري من الاعداد الكسرية بدون تقريب .
3- Mod--------> وظيفتها ايجاد باقي قسمة الاعداد الصحيحة.
امثلة عليها :
للداله (Round) :
Round(46.977.1)l
الناتج يكون :
46.98
للداله ( Trunc)
Trunc(46.977.1)l
الناتج يكون :
46.97
الداله (Mod)
Mod(1600.300)l
الناتج يكون :
1000
مثال اخر للتوضيح بشكل سريع :
اكتب استعلام لعرض اسماء ورواتب وعمولة الموظفين وباقي قسمة الرواتب والعمولات للموظفين الذين وظيفتهم 'salesman'؟
الحل :
select ename,sal,comm,mod(sal,com)l
from emp
where job= 'salesman';l
توضيح الحل :
1- اسماء الموظفين ونرمز لهم بالرمز ------->ename
2- رواتب الموظفين ونرمز له بالرمز --------> sal
3- عموله الموظفين ونرمز لها بالرمز -------> comm
4- باقي قسمة الرواتب والعمولات -----------> mod(sal,com)l
5- من جدول الموظفين ونرمز له بالرمز -----> emp
6- بشرط ! وهو ان نوجد باقي قسمة الرواتب والعمولات للمظفين الذين وظيفتهم 'salesman'; فقط !
الدوال الحرفية :
تعريفها ... هي دوال تأخذ وسائط (حرفية) وتعود بقيمة معينه حسب وظيفة كل دالة
ملاحظه .. يمكن النواتج تكون (حروف او ارقام )
الدوال الحرفيه تنقسم الى قسمين ..
أ- دوال التحويل
ب- دوال تناول البيانات
دوال التحويل :
1- lower
2- upper
3- intcap
دوال تناول البيانات وهي :
1- concat
2- substr
3- length
4- instr
5- lpad
ولنأخذ الان كل داله مع شرح مبسط لها :
1- lower-------> تحويل البيانات النصيه من حروف كبيره الى صغيره ( اي من A, الى a)
مثال على ذلك : اكتب استعلام يعرض اسماء الموظفين بحروف كبيره ؟
الحل :
select lower(ename)l
2- upper-------> تحويل البيانات النصيه من حروق صغيره الى حروف كبيره ( اي من aالى A)- عكس الـLOWER
مثال على ذلك:
اكتب استعلام يعرض اسماء الموظفين بحروف صغيره ؟
الحل :
select upper(ename)l
3- intcap------> تحويل اول حرف من البيانات النصيه الى حروف كبيرة وباقي الكلمه الى حروف صغيره( اي من eqlaاوAQLAالى Aqla)
مثال على ذلك:
اكتب استعلام يعرض اول حرف من الوظيفه بحرف كبير وبقيه الاحرف صغيره؟
الحل :
select intcap(job)l
دوال تناول البيانات
1- concat -------->تعني جمع سلسلتين نصيتين في عمود واحد
مثال على ذلك :
اكتب استعلام يعرض عمود الاسماء وعمود الوظائف في عمود واحد؟
الحل :
select concat(ename,job)l
2- substr------>تعني عرض حروف معينه من الكلمه تبداء من ارقام محدده
( يعني مثل اقول اطبع لي الكلمه من حرف رقم1 الى الحرف رقم 5 )
مثال على ذلك :
اكتب استعلام يعرض لنا الحروف منالحرف رقم 1 الى الحرف رقم 4؟
الحل :
select substr(job,1,4)l
3- length ------>تعني عدد الاحرف المكونه للكلمه
مثال على ذلك :
اكتب استعلام بعرض عدد احرف اسم كل موظف ؟
الحل :
select length(ename)l
4- instr------->تحديد مواقع الاحرف( يعني ممكن نحدد حرف نبيه من الكلمه ونقول له وين مكانه من الجمله؟
مثال على ذلك :
اكتب استعلام يوضح موقع الحرف 'Q' من كلمه اقلاع
الحل :
select instr(eqla,'q')l
لنأخذ امثله شامله لها :
مثال شامل-1- :اكتب استعلام يعرض اسماء الموظفين لحروف صغيره، واول حرف من الوظيفه كبير وبقية الاحرف صغيرة ،
وعدد احرف اسم كل موظف ، وضم عمودي الراتب والعمولة في عمود واحد ؟
الحل :
select lower(ename),initcap(job),length(ename),concat(sal,comm)l
from emp;l
مثال شامل -2- :اكتب استعلام لعرض اسماء الموظفين، واسمائهم ووظائفهم معاً، وعرض عدد حروف اسم كل موظف،:
وعرض موقع الحرف 'A' من اسماء الموظفين للموظفين الذين وظيفتهم SALESMAN؟
الحل :
select ename,concat(ename,job),length(ename),instr(ename,'A')l
from emp
where job='salesman';l
ملاحظات على الحل :
وجود شرط فيه !
دوال التاريـــــــــــــ 'DATE FUNCTION' ـــــخ
لمحه سريعه عنها:
يتم تخزين التاريخ في جدول يسمى الـDUAL لذلك يجب ان تتم عملية استرجاع التاريخ من الجدول
المسمى 'DUAL'
ودوال التاريخ هي :
1- الداله ........... SYSDATE
2- الداله ...........DAY_NEXT
3- الدالة ...........DAY_LAST
4- الدالة .....MONTHS_BETWEEN
لنشرحها بالتفصيل :
اولاً : الداله ........... SYSDATE
تعود بنا هذه الداله الى تاريخ اليوم الحالي
والشكل العام لها ....
select sysdate
from dual;l
ملاحظه : نلاحظ هنا وضعنا اسم الجدول dual;
مثال :
اكتب استعلام يعرض اسماء الموظفين وتواريخ تعينهم، ثم عرض تاريخ التعين +8 ايام، وعرض التاريخ- 7 ايام،
وعرض عدد الايام من تاريخ تعينه حتى التاريخ الحالي ؟
الحل :
select ename,hiredate,hiredate+8,hiredate-7,(sysdate-hiredat)l
from emp;l
2- الداله ...........DAY_NEXT
هذه الدالة تقوم بعرض اول تاريخ تالي للتاريخ المعطى.
الشكل العام لهذه الداله.
next_day(datecoloumn,dayname)l
ملاحظه ...
datecoloumn= التاريخ الموجود داخل الجدول ويوضع بين حاصرتين علويتين .
dayname =اسم اليوم المعطى ويجب وضعه بين حاصرتين علويتين.
مثال :
اذا كان التاريخ هو 1981/6/10 وطلب من الجهاز تحديد التاريخ الذي يصادف يوم الجمعه من نفس الشهر؟
الحل :
select next_day('10-june-81','friday');l
from dual;l
3- الدالة ...........DAY_LAST
نقصد بها ايجاد اليوم الاخير من كل شهر.
مثال :
اكتبي استعلام لعرض اليوم الاخير من شهر تعيين كل موظف ؟
الحل :
select last_day(hiredate)l
from emp;l
4- الدالة .....MONTHS_BETWEEN
نقصد بها ايجاد عدد الاشهر بين تاريخين يتم اعطائهم للدالة .
الشكل العام :
MONTHS_BETWEEN (date1,date2)l
ملاحظه ...
date1= التاريخ الاول او اسم العمود
date2=التاريخ الثاني او اسم العمود
مثال :
استعلام يعرض عدد الاشهر بين تاريخ التعيين والتاريخ الحالي ؟
الحل :
select MONTHS_BETWEEN( sysdate,hiredate)l
from emp;l
مثال شامل لدوال التاريخ :
استعلام لعرض رقم الموظف، تاريخ التعيين ، عدد الاشهر التي قضاها منذ تاريخ التعيين وتاريخ اول يوم جمعه بعد تعيينه،
واخر يوم من شهر تعيينه للموظفين الذين مر على تعيينهم اقل من 400 شهر ؟
الحل :
select empno,hiredate,months_between(sysdate,hiredate),next_date(hiredate,'friday),last_date(hiredate)l
from emp
where month_between(sysdate-hiredate<400);l