إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

حد يساعدنى فى عمل function مثل sum


8 رد (ردود) على هذا الموضوع

#1 here comes

here comes

    مشترك

  • الأعضــاء
  • 90 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 20 November 2006 - 04:37 AM

السلام عليكم
أنا بحاول أعمل function مثل sum أدخل لها إسم العمود فتخرج لى مجموع قيمه وعملت التاليه ولكنها لا تعمل وعايز شرط أخرج بيه من ال loop عندما تنتهى قيم العمود

CREATE OR REPLACE FUNCTION hos_sum(col IN NUMBER)
 RETURN NUMBER IS
 b number:=0;
BEGIN
loop
b:=b+col;
exit when b>100;
end loop;
   RETURN (b);
END hos_sum;

إزاى أعمل loop تنتهى بنهاية القيم فى العمود (أيه الشرط اللى أستخدمه) لأنى مش مستخدم cursor لأنى لو إستخدمته مش هيطلع النتيجه المظبوطه

تحياتى

تم التعديل بواسطة here comes, 20 November 2006 - 04:43 AM.


#2 gamal

gamal

    مشترك

  • الأعضــاء
  • 95 مشاركة

تاريخ المشاركة 29 November 2006 - 02:11 PM

while b>100 loop
------------
----------
exit;

#3 mohtaseb

mohtaseb

    عضو

  • الأعضــاء
  • 4 مشاركة

تاريخ المشاركة 30 November 2006 - 12:09 PM

اضف
exit where b % not found;
end loop

#4 walid99

walid99

    عضو

  • الأعضــاء
  • 3 مشاركة

تاريخ المشاركة 22 December 2006 - 06:11 PM

انا شايف انه ال function غريب

لانه ال sum لـ اي عمود في الDB مش محتاج function.

مثلا بدك تعمل sum لعمود الرواتب بكل بساطه بتكتب select sum(sal) from emp

#5 mw_wageeh

mw_wageeh

    عضو نشط

  • الأعضــاء
  • 251 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 22 December 2006 - 06:58 PM

السلام عليكم

اتمنى ان حضرتك توضح السؤال اكتر

هل حضرتك عاوز تجيب مجموع قيمة عمود معين بس بدون استخدام دالة SUM

يعنى تعمل دالة تحاكى SUM

ام حضرتك عاوز تعمل فانكشن تديها اى اسم عمود فترجع مجموع العمود دة

#6 here comes

here comes

    مشترك

  • الأعضــاء
  • 90 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 26 December 2006 - 10:29 PM

السلام عليكم

اتمنى ان حضرتك توضح السؤال اكتر

هل حضرتك عاوز تجيب مجموع قيمة عمود معين بس بدون استخدام دالة SUM

يعنى تعمل دالة تحاكى SUM

ام حضرتك عاوز تعمل فانكشن تديها اى اسم عمود فترجع مجموع العمود دة

أيوه أنا عايز أعمل داله تعمل نفس عمل الداله sum عايز أعرف عملوها إزاى يعنى
تحياتى

#7 amsh

amsh

    عضو

  • الأعضــاء
  • 20 مشاركة

تاريخ المشاركة 28 December 2006 - 09:53 AM

ارجو توضيح عمل الفنكشن التي كتبتها لكي استطيع المساعدة
فلماذا تستخدم متغير من نوع رقمي كمدخل للفانكشن الست تريد اسم العمود أم انه معروف من قبل
على فكرة الموضوع يجب استخدام الكيرسر فيه وسوف يعمل بشكل دقيق فقك جرب
For i in(select col_name from table_name ) loop
var:=i.col_name +var;
end loop;
ولا تنسى اسناد قيمة الصفر للمتغير كقيمة افتراضية لأن الNull سيخرب كل شيء
والسلام عليكم ورحمة الله

#8 here comes

here comes

    مشترك

  • الأعضــاء
  • 90 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 30 December 2006 - 12:53 PM

ارجو توضيح عمل الفنكشن التي كتبتها لكي استطيع المساعدة
فلماذا تستخدم متغير من نوع رقمي كمدخل للفانكشن الست تريد اسم العمود أم انه معروف من قبل
على فكرة الموضوع يجب استخدام الكيرسر فيه وسوف يعمل بشكل دقيق فقك جرب
For i in(select col_name from table_name ) loop
var:=i.col_name +var;
end loop;
ولا تنسى اسناد قيمة الصفر للمتغير كقيمة افتراضية لأن الNull سيخرب كل شيء
والسلام عليكم ورحمة الله


والله ياباشا أنا مش فاكر أنا عامله نوع رقمى ليه لأنى بقالى فتره فى الفورم والريبورت
ثانياً بإستخدام الكيرسر ممكن عادى عمل فانكشن ولكن يجب إدخال إتنين باراميتر لها واحد لإسم الجدول والثانى لإسم العمود أما أنا فأريد أن أدخل لها باراميتر واحد لإسم العمود وأعمل سيليكت له من أى جدول أريده (مثل count و sum )
select hos(sal)from emp; مثلاً
جزاك الله خيراً

#9 -=|mOOdY|=-

-=|mOOdY|=-

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,324 مشاركة

تاريخ المشاركة 31 December 2006 - 02:41 PM

السلام عليكم
وكل عام وانتم بخير :)
على فكرة هذا الموضوع اخذ من وقتي الكثير لحتى استطعت حله وهو يعتمد على
User-Defined Aggregate Functionsالتي تعتمد على بعض الفنكشنز وهي
Initializes
Iteratively
Merge
Terminates

create or replace type CustomSumImpl as object
(
sum NUMBER,
static function ODCIAggregateInitialize(sctx IN OUT CustomSumImpl) return number,
member function ODCIAggregateIterate(self IN OUT CustomSumImpl,value IN number) return number,
member function ODCIAggregateTerminate(self IN CustomSumImpl,returnValue OUT number, flags IN number) return number,
member function ODCIAggregateMerge(self IN OUT CustomSumImpl, 
ctx2 IN CustomSumImpl) return number
);
create or replace type body CustomSumImpl is 
static function ODCIAggregateInitialize(sctx IN OUT CustomSumImpl) 
return number is 
begin
sctx := CustomSumImpl(0);
return ODCIConst.Success;
end;

member function ODCIAggregateIterate(self IN OUT CustomSumImpl, value IN number) 
return number is
begin
self.sum := self.sum + value;
return ODCIConst.Success;
end;

member function ODCIAggregateTerminate(self IN CustomSumImpl, returnValue OUT number, flags IN number)
return number is
begin
returnValue := self.sum;
return ODCIConst.Success;
end;

member function ODCIAggregateMerge(self IN OUT CustomSumImpl, ctx2 IN CustomSumImpl) 
return number is
begin
self.sum := ctx2.sum;
return ODCIConst.Success;
end;
end;

create or replace function CustomSum (input NUMBER)
RETURN NUMBER 
PARALLEL_ENABLE AGGREGATE USING CustomSumImpl;
select CustomSum(sal)
from emp;

:) :rolleyes: :blink:

تحياتي

تم التعديل بواسطة moody_4u, 31 December 2006 - 02:44 PM.

صورة

!!! كم أنت عبقري !!!