بسم الله الرحمن الرحيم
كيف يمكنني إنشاء function يقوم بإظهار أعلى راتب للموظفين من دون استخدام الدالة max
كما أريد إنشاء function يقوم بإظهار مجموع الرواتب للموظفين من دون استخدام الدالة sum
ولكم الشكر
بسم الله الرحمن الرحيم
كيف يمكنني إنشاء function يقوم بإظهار أعلى راتب للموظفين من دون استخدام الدالة max
كما أريد إنشاء function يقوم بإظهار مجموع الرواتب للموظفين من دون استخدام الدالة sum
ولكم الشكر
لماذا لا تريد إستخدام الدوال max و sum ؟
بالنسبة للدالة فإليك التالي مع العلم اني ماجربتها !!
declare
empsal number;
val1 number := 0;
val2 number := 0;
cursor c1 is select sal from emp;
begin
open c1;
loop
exit when c1%notfound;
feach c1 into empsal;
val1 = empsal;
if val1 > val2 then
val2 := val1;
end if;
end loop;
close c1;
dbms_output.put_line('max value is:' || val2);
end;وبالتوفيق ،،،،
Oracle 10g >>> ماذا تعرف عنه ؟ ؟؟
عمل Compile لجميع الكائنات الـ inviled لديك بقاعدة البيانات
OCP: Oracle Certified Professional 10gR2 Database Administration
السلام عليكم،
شكراً لك سيد إبراهيم على الرد ولكن الحل الذي كتبته لم ينجح فلقد ظهرت رسائل error عندما جربت الكود المكتوب ، كما أنني أبحث عن حل عن طريق function
اخي الكريم قمت بتعديل الكود وتجربته وكان الخطأ بكلمة fetch ،، ماأدري دائماً أخطأ بها :D :
عالعموم هذا الكود لتجربته :
طبعاً في البداية تعمل :
set serveroutput on;
declare
empsal number;
val1 number;
val2 number;
cursor c1 is select sal from emp;
begin
val1 := 0;
val2 := 0;
open c1;
loop
exit when c1%notfound;
fetch c1 into empsal;
val1 := empsal;
if val1 > val2 then
val2 := val1;
end if;
end loop;
close c1;
dbms_output.put_line ('max value is:'||val2);
end;وأما بالنسبة لموضوع الـ Function فهو سهل لاحظ :
create or replace function get_max_sal return number is empsal number; val1 number; val2 number; cursor c1 is select sal from emp; begin val1 := 0; val2 := 0; open c1; loop exit when c1%notfound; fetch c1 into empsal; val1 := empsal; if val1 > val2 then val2 := val1; end if; end loop; close c1; return (val2); end;
ولاحظ عند تنفيذ جملة الإستعلام :
SQL> select get_max_sal from dual; GET_MAX_SAL ----------- 5000
وبالنسبة لموضوع مجموع الرواتب سأتركها لك ،، حاول إنشائها لتستفيد .
وبالتوفيق ..
:P
:s
:D
تم تعديل هذه المشاركة بواسطة إبراهيم بخش في 2 مايو 2007 في 14:21
Oracle 10g >>> ماذا تعرف عنه ؟ ؟؟
عمل Compile لجميع الكائنات الـ inviled لديك بقاعدة البيانات
OCP: Oracle Certified Professional 10gR2 Database Administration
create or replace function get_SUM_sal
return number
is
empsal number;
val1 number;
cursor c1 is select salARY from empLOYEES;
begin
val1 := 0;
open c1;
loop
exit when c1%notfound;
fetch c1 into empsal;
val1 := VAL1 + empsal;
end loop;
close c1;
return (val1);
end;
/
FOR SUMATION
أخي أولاً شكراً على الحل
جربت الحل لكن لم تظهر النتيجة الصحيحة لأن الـدالة تقوم بجمع أول راتب في أول سطر من الجدول مرة ثانية بعد انتهاء جمع جميع الرواتب، فقمت بتغيير موقع السطر
exit when c1%notfound كما أضفت order by sal desc ليصبح الحل كما يلي
SQL> create or replace function get_SUM_sal
2 return number
3 is
4 empsal number;
5 val1 number;
6 cursor c1 is select sal from emp order by sal desc;
7 begin
8 val1 := 0;
9 open c1;
10 loop
11 fetch c1 into empsal;
12 val1 := VAL1 + empsal;
13 exit when c1%notfound;
14 end loop;
15 close c1;
16 return (val1);
17 end;
18 /
Function created.
SQL> select get_SUM_sal from dual;
GET_SUM_SAL
-----------
29825
بدي اسال سؤال لو سمحتم
شو هنا المقصود ب
empsal
????
الاخت رنا
empsal
تعنى مجرد متغير لتخزين قيمة المرتب فيه
من نوع number
ويمكن استبداله بأى متغير اخر كما يلى
declare
n number;
x number;
y number;
cursor cur is select sal from emp;
begin
x := 0;
y := 0;
open cur;
loop
fetch cur into n;
exit when cur%notfound;
x := n;
if x >y then
y := x;
end if;
end loop;
close cur;
dbms_output.put_line ('max value is:'||y);
end;
/
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳