الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

sum and count function

بدأه reem2007 في 30 أبريل 2007 · 7 رد · 3,212 مشاهدة · في قسم لغةالاجرائات Pl/sql
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

كيف يمكنني إنشاء function يقوم بإظهار أعلى راتب للموظفين من دون استخدام الدالة max

كما أريد إنشاء function يقوم بإظهار مجموع الرواتب للموظفين من دون استخدام الدالة sum

ولكم الشكر

#2

لماذا لا تريد إستخدام الدوال 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;

وبالتوفيق ،،،،

#3

السلام عليكم،

شكراً لك سيد إبراهيم على الرد ولكن الحل الذي كتبته لم ينجح فلقد ظهرت رسائل error عندما جربت الكود المكتوب ، كما أنني أبحث عن حل عن طريق function

#4

اخي الكريم قمت بتعديل الكود وتجربته وكان الخطأ بكلمة 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

#5

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

#6

أخي أولاً شكراً على الحل

جربت الحل لكن لم تظهر النتيجة الصحيحة لأن الـدالة تقوم بجمع أول راتب في أول سطر من الجدول مرة ثانية بعد انتهاء جمع جميع الرواتب، فقمت بتغيير موقع السطر

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

#7

بدي اسال سؤال لو سمحتم

شو هنا المقصود ب

empsal

????

#8

الاخت رنا

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;

/


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

مواضيع مشابهة