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

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

صورة
- - - - -

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


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

#1 alcagam

alcagam

    عضو

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

تاريخ المشاركة 19 July 2007 - 11:16 AM

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

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]

#2 sky information

sky information

    عضو نشط

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

تاريخ المشاركة 19 July 2007 - 01:05 PM

الأخ\ 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;


#3 alcagam

alcagam

    عضو

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

تاريخ المشاركة 20 July 2007 - 10:41 AM

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