الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

مشكله بسيطه اوىىىى فى Trigger

Featured Replies

بتاريخ:

السلام على من اتبع الهدى

CREATE OR REPLACE PROCEDURE CHECK_SALARY(V_JOB_ID 
VARCHAR2 , V_SAL NUMBER )  IS
yy NUMBER ;
V_MIN_SALARY  NUMBER ;
V_MAX_SALARY  NUMBER ;
invalid_JOB_ID EXCEPTION;
invalid_salary EXCEPTION;
CURSOR emp_cursor iS
  SELECT MIN_SALARY ,MAX_SALARY     
  from JOBS WHERE JOB_ID = V_JOB_ID ;
BEGIN SELECT MIN_SALARY into yy from JOBS  WHERE JOB_ID = V_JOB_ID ;
 OPEN emp_cursor;

 LOOP
   EXIT WHEN emp_cursor%NOTFOUND; 
   FETCH emp_cursor INTO V_MIN_SALARY, V_MAX_SALARY;
   end loop;
iF  v_sal NOT  BETWEEN  V_MIN_SALARY AND V_MAX_SALARY THEN
RAISE  invalid_salary;
end IF ;
EXCEPTION
 WHEN invalid_salary THEN
   DBMS_OUTPUT.PUT_LINE('Invalid salary'|| v_saL ||' Salaries for job' ||V_JOB_ID|| 'must be between' || V_MIN_SALARY|| 'and' || V_MAX_SALARY);
 WHEN NO_DATA_FOUND THEN
 DBMS_OUTPUT.PUT_LINE( 'invalid_JOB_ID NO EMPLOYY ' ||V_JOB_ID);
END ; 
***********************************************
CREATE OR REPLACE TRIGGER  CHECK_SALARY_TRG
BEFORE UPDATE or INSERT   OF salary, job_id ON employees
FOR EACH ROW
BEGIN IF INSERTING then
check_salary(:NEW.job_id, :NEW.salary);
ELSIF UPDATING('SALARY') then
check_salary(:old.job_id, :NEW.salary);
ELSIF UPDATING('job_id') then
check_salary(:NEW.job_id, :old.salary);
end if;
end;

TRIGGER شغال ومفيش مشكله وبيطلع الارسائل بس حتى لو فى مشكله فى السعر يطلع الرسائل ويسجل بردك السعر الجديد انا عايزو يلغى
ادخال او تعديل السعر لو مش مظبوط وبطلع الرساله

بتاريخ:

استخدم

Raise_Application_Error(-20100,'');


ده هيعمل اكسبشن و يوقف الكوميت علي الداتا بيز وبالتالي العمليه كلها هيتعمل رول باك عليها وممكن تحط الرساله الي عاوزها بين الكوت وبتظهر علي مستوي الابلكيشن

تحياتي

بتاريخ:
  • كاتب الموضوع

اخى الفاضل نا حاولت استخدام اليرور بتاعك ومعملش حاجه
كتابته بهذه الطريقه

CREATE OR REPLACE PROCEDURE CHECK_SALARY(V_JOB_ID
VARCHAR2 , V_SAL NUMBER ) IS
yy NUMBER ;
V_MIN_SALARY NUMBER ;
V_MAX_SALARY NUMBER ;
insert_excep EXCEPTION;

PRAGMA EXCEPTION_INIT    (insert_excep,-20100);
invalid_salary EXCEPTION;
CURSOR emp_cursor iS
SELECT MIN_SALARY ,MAX_SALARY
from JOBS WHERE JOB_ID = V_JOB_ID ;
BEGIN SELECT MIN_SALARY into yy from JOBS WHERE JOB_ID = V_JOB_ID ;
OPEN emp_cursor;

LOOP
EXIT WHEN emp_cursor%NOTFOUND;
FETCH emp_cursor INTO V_MIN_SALARY, V_MAX_SALARY;
end loop;
iF v_sal NOT BETWEEN V_MIN_SALARY AND V_MAX_SALARY THEN
RAISE invalid_salary;
RAISE insert_excep;
end IF ;
EXCEPTION
WHEN invalid_salary THEN
DBMS_OUTPUT.PUT_LINE('Invalid salary'|| v_saL ||' Salaries for job' ||V_JOB_ID|| 'must be between' || V_MIN_SALARY|| 'and' || V_MAX_SALARY);

WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE( 'invalid_JOB_ID NO EMPLOYY ' ||V_JOB_ID);
WHEN insert_excep THEN
DBMS_OUTPUT.PUT_LINE( 'invalid update ');
END ; 
/
show errors



ارجو التوضيح اليرور وتعديل الكود بتاعى باليرور للتوضيح وشكراااااااااا

بتاريخ:

استخدمته فين مش شايف الكود الي كتبته اكتبه تحت ال دي بي ام اس علي طول بنفس السينتكس الي كاتبتها انا

بتاريخ:
  • كاتب الموضوع

CREATE OR REPLACE PROCEDURE CHECK_SALARY(V_JOB_ID
VARCHAR2 , V_SAL NUMBER ) IS
yy NUMBER ;
V_MIN_SALARY NUMBER ;
V_MAX_SALARY NUMBER ;
insert_excep EXCEPTION;

PRAGMA EXCEPTION_INIT (insert_excep,-20100);
invalid_salary EXCEPTION;
CURSOR emp_cursor iS
SELECT MIN_SALARY ,MAX_SALARY
from JOBS WHERE JOB_ID = V_JOB_ID ;
BEGIN SELECT MIN_SALARY into yy from JOBS WHERE JOB_ID = V_JOB_ID ;
OPEN emp_cursor;

LOOP
EXIT WHEN emp_cursor%NOTFOUND;
FETCH emp_cursor INTO V_MIN_SALARY, V_MAX_SALARY;
end loop;
iF v_sal NOT BETWEEN V_MIN_SALARY AND V_MAX_SALARY THEN
RAISE invalid_salary;

end IF ;
EXCEPTION
WHEN invalid_salary THEN
DBMS_OUTPUT.PUT_LINE('Invalid salary'|| v_saL ||' Salaries for job' ||V_JOB_ID|| 'must be between' || V_MIN_SALARY|| 'and' || V_MAX_SALARY);
RAISE_APPLICATION_ERROR (-20201,
       'inveald update');
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE( 'invalid_JOB_ID NO EMPLOYY ' ||V_JOB_ID);

END ;
/
show errors


جزاك الله ياخى طريقه محترفين ولكن هل الناتج مفروض يبقى كده

عند ادخال سعر عالى
Invalid salary600000 Salaries for jobSA_REPmust be between6000and12000

begin
*

ERROR at line 1:
ORA-20201: inveald update
ORA-06512: at "HR.CHECK_SALARY", line 27
ORA-06512: at "HR.CHECK_SALARY_TRG", line 2
ORA-04088: error during execution of trigger 'HR.CHECK_SALARY_TRG'
ORA-06512: at "HR.ADD_EMPLOYEE", line 6
ORA-06512: at line 2

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.