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

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

صورة
- - - - -

كيف ربط Function بـ Procedure


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

#1 ATmax

ATmax

    عضو

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

تاريخ المشاركة 09 December 2005 - 11:18 AM


السلام عليكم ورحمة الله وبركاته


هذا ما فهمته من السؤال "ربط Function بـ Procedure"

طبعاً فهمت السؤال هو نصف الاجابة وانا ابي توضيح لا اقل ولا اكثر

مثلاً عندي هذا السؤال واليكون مثال :-

مستعيناً بدالة ( Function )مثلا اسمها annal اكتب Procedure لطباعة الراتب السنوي لجميع الموظفين الذين يأخذون مرتب أعلى من 1000 ؟؟؟

اعرب ما تحته خط خخخخ اقصد وضح ما تحته خط

انا الي فهمته انه لازم نستخدم Cursor عشان نرجع الراتب السنوي لجميع الموظفين الذين يأخذون مرتب أعلى من 1000 ؟؟؟


ياليت احد يوضحلي


واكون شاكر له هذا المعروف " والله يوفقكم لما يحبة ويرضاه "


إلى اللقاء



#2 محمد فيصل امين خربط

محمد فيصل امين خربط

    عضو

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

تاريخ المشاركة 28 December 2005 - 04:28 PM

create or replace function annual(sal number) return number is
annual_sal number;
begin
select sal*12+nvl(comm,0) from emp ;
end;
create or replace procedure sal is
cursor c is
select sal from emp where sal>1000
sal_variable number;
begin
open c;
loop
fetch c into sal_variable
x=annual(sal_variable);
dbms_output.put_line(x);
exit when c%notfound;
end;


mohamad_khrbat@yahoo.com
لمزيد من الاستفسار

#3 ABUSANAD

ABUSANAD

    عضو نشط

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

تاريخ المشاركة 31 December 2005 - 09:57 AM

السلام عليكم, الحل كالاتي :-

CREATE OR REPLACE FUNCTION func_annual_sal
RETURN BOOLEAN -- when want to check employee's annual salary
-- which is more than 1000
IS
v_sal emp.sal%TYPE ;
CURSOR cur_sal IS SELECT NVL(sal, 0) * 12 from emp ;
BEGIN
OPEN cur_sal ;
LOOP
FETCH cur_sal INTO v_sal ;
IF v_sal > 1000 THEN
RETURN (TRUE) ;
ELSE
RETURN (FALSE) ;
END IF ;
EXIT WHEN cur_sal%NOTFOUND ;
END LOOP ;
CLOSE cur_sal ;
END func_annual_sal ;

ثم نكتب الاجراء التالي :-

CREATE OR REPLACE PROCEDURE proc_annual_sal
IS
v_sal := func_annual_sal ; -- we declare v_sal variable to the
-- previous function created
BEGIN
IF func_annual_sal THEN
DBMS_OUTPUT.PUT_LINE (v_sal) ; -- This means fuction return
-- true
ELSE -- If function returns false
RAISE_APPLICATION_ERROR
(-20202, 'There is no employee whose annual salary more than
1000') ;
END IF ;
END proc_annual_sal ;

SQL> SET SERVEROUTPUT ON
SQL> EXEC PROC_ANNUAL_SAL
ثم ستحصل على الاجابة بعد تنفيذ الاجراء
أخوكم المحب
احمد العولقي
OCP Developer 9i

#4 ATmax

ATmax

    عضو

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

تاريخ المشاركة 31 December 2005 - 04:38 PM

شكرا على مشاركتكم في الموضوع ..؟...!!!


جاري التجربة وسوف اوافيكم بالاخبار


إلى اللقاء