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

سؤال عن كيفية تشغيل الاجراء من داخل الزناد


alcagam

Recommended Posts

أريد عمل زناد يشترط الا يكون راتب الموظف أكبر من راتب الرئيس وقد حاولت التالي لكن ما ظبطت ,, معليش أخوكم لسة في بداية الطريق أرجوا المساعة وجزا الله خيراً كل من يقوم على أمر هذا المنتدى الذي أقل ما يقال عنه أنه رائع ...

SQL> create or replace procedure get_president_sal
2 (v_job in emp2.job%type)
3 is
4 v_sal emp2.sal%type;
5 begin
6 select sal into v_sal
7 from emp2
8 where job = 'PRESIDENT';
9 END get_president_sal;
10 /

Procedure created.

SQL> EXECUTE get_president_sal('PRESIDENT')

PL/SQL procedure successfully completed.

SQL> CREATE OR REPLACE TRIGGER not_ov_president_sal
2 before update or insert of sal,job on emp2
3 FOR EACH ROW
4 WHEN (new.job <> 'PRESIDENT')
5 DECLARE
6 v_pres_sal emp2.sal%type;
7 BEGIN
8 v_pres_sal:=get_president_sal('PRESIDENT');
9 IF (:new.sal) > v_pres_sal then
10 RAISE_APPLICATION_ERROR(-20505,'presiden salry zone');
11 END IF;
12 END;
13 /

Warning: Trigger created with compilation errors.

SQL> SHOW ERROR
Errors for TRIGGER NOT_OV_PRESIDENT_SAL:

LINE/COL ERROR
-------- -----------------------------------------------------------------
4/1 PL/SQL: Statement ignored
4/13 PLS-00222: no function with name 'GET_PRESIDENT_SAL' exists in
this scopeeft]

رابط هذا التعليق
شارك

الأخ\ alcagam
انا فهت من سؤالك انك تريد منع الموظفين من الحصول على راتب أعلى من راتب الرئيس

1- نعمل FUNCTION :

 
CREATE OR REPLACE FUNCTION GET_SALARY RETURN NUMBER
IS
V_SAL NUMBER:=0;
BEGIN
SELECT SAL INTO V_SAL FROM EMP
WHERE JOB='PRESIDENT';
RETURN(V_SAL);
END;



2- نعمل TRIGGER :

CREATE OR REPLACE  TRIGGER CHECK_SALARY
BEFORE INSERT OR UPDATE ON EMP
FOR EACH ROW
BEGIN
IF :NEW.SAL>GET_SALARY THEN
RAISE_APPLICATION_ERROR(-20502,'YOU CANNOT ASSIGN SALARY MORE THAN'||GET_SALARY );
END IF;
END;

رابط هذا التعليق
شارك

الأخ الفاضل \ sky information
أولاً لك كل الشكر على الاهتمام بالفعل الدالة والزناد مشى حالهم لكن عند التنفيذ بيصطدموا ب mutating ساحاول حلها باذن الله ,,, مرة اخرى لك الشكر عزيزي

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية