Presentation is loading. Please wait.

Presentation is loading. Please wait.

معالجة الاستثناءات.

Similar presentations


Presentation on theme: "معالجة الاستثناءات."— Presentation transcript:

1 معالجة الاستثناءات

2 الاستثناءات ماهي الاستثناءات؟
الاستثناءات عبارة عن الأخطاء التي ممكن أن تظهر خلال عملية تنفيذ وحدة (Block) وفي حال ظهورها تؤدي إلى وقف عملية التنفيذ.

3 الاستثناءات تنقسم الاستثناءات إلى 3 أقسام:
1- الأخطاء المعرفة مسبقا (Predefined Oracle Server errors) 2- الأخطاء الغير معرفة مسبقا (Non-Predefined Oracle server errors) 3- استثناءات معرفة بواسطة المستخدم (User Defined Exceptions) تتم معالجة الاستثناءات في الجزء الخاص بالاستثناءات في وحدة ال(Block)

4 هنا تتم معالجة الاستثناءات والإمساك بها
DECLARE .... BEGIN …. EXCEPTION WHEN exception1 [OR exception ] THEN statement1; statement2; [WHEN exception3 [OR exception ] THEN . . .] [WHEN OTHERS THEN هنا تتم معالجة الاستثناءات والإمساك بها

5 معالجة الاستثناءات 1- الأخطاء المعرفة مسبقا (Predefined Oracle Server errors): هي عبارة عن 20 خطأ لكل منها اسم ,ويتم الإمساك بها في جزء الاستثناءات داخل وحدة (Block) وذلك لمعالجتها عن طريق كتابة إجراء معين يتم عمله عند ظهور الخطأ. الجدول التالي يبين بعض منها: الاستثناء الوصف ZERO_DEVIDE القسمة على صفر VALUE_ERROR خطأ في عملية حسابية أو تحويل أو خطأ في الحجم TOO_MANY_ROWS جملة الاسترجاع (Select)أعادت أكثر من صف NO_DATA_FOUND جملة الاسترجاع (Select) لم تعد أي نتيجة NOT_LOGGED_ON محاولة إجراء عملية على قاعدة البيانات دون دخول.

6 معالجة الاستثناءات (الأخطاء المعرفة مسبقا)
معالجة الاستثناءات (الأخطاء المعرفة مسبقا) مثال: DECLARE v_ename emp.ename%Type; v_empno emp.empno%Type := &p_eno; Begin SELECT ename INTO v_ename From emp WHERE empno = v_empno; DBMS_OUTPUT.PUT_LINE ('Employee Name is ' || v_ename ); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE (' Invalid Employee Number ' || v_empno); END;

7 معالجة الاستثناءات (الأخطاء المعرفة مسبقا)
معالجة الاستثناءات (الأخطاء المعرفة مسبقا) مثال: DECLARE v_ename emp.ename%Type; v_job emp.job%Type := upper( '&p_ejob'); BEGIN SELECT ename INTO v_ename FROM emp WHERE job= v_job; DBMS_OUTPUT.PUT_LINE ('Employee Name is ' || v_ename ); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE ('There is no Employee has this '|| v_job); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE ('The Job '|| v_job || ' has more than one Employee ' ); END;

8 معالجة الاستثناءات 2- الأخطاء الغير معرفة مسبقا:
عبارة عن أي خطأ من أخطاء أوركال غير تلك المعرفة مسبقا وتظهر ضمنيا ولكن يجب تعريفها في الجزء التعريفي (Declarative section). للتعامل مع هذا النوع من الاستثناءات: 1- نقوم بتعريف الاستثناء في الجزء التعريفي لل(Block): DECLARE ….. Exception_name EXCEPTION; 2- ربط الاستثناء مع الخطأ في الجزء التعريفي بعد تعريف الاستثناء باستخدام (PRAGMA_EXCEPTION_INIT): PRAGMA_EXCEPTION_INIT(Exception_name ,error_number); 3- معالجة الاستثناء في جزء الاستثناءات في وحدة ال(Block): يتم ذلك عن طريق كتابة : WHEN Exception_name THEN كتابة الجمل الناسبة للمعالجة هذا النوع من الاستثناءات غالبا يعالج بواسطة WHEN OTHERS لكن إذا لم تتم معالجته بهذه الطريقة فإننا نحتاج إلى معالجته كما في الأعلى (عن طريق تعريفه وربطه مع الخطأ ثم معالجته).

9 معالجة الاستثناءات (الأخطاء الغير معرفة مسبقا)
معالجة الاستثناءات (الأخطاء الغير معرفة مسبقا)

10 معالجة الاستثناءات (الأخطاء الغير معرفة مسبقا)
معالجة الاستثناءات (الأخطاء الغير معرفة مسبقا) DECLARE -مثال: e_emps_remaining EXCEPTION; تعريف الاستثناء PRAGMA EXCEPTION_INIT ( e_emps_remaining , -2292); ربط الاستثناء مع الخطأ رقم v_deptno dept.deptno%TYPE := &p_deptno; BEGIN DELETE FROM dept WHERE deptno = v_deptno; COMMIT; EXCEPTION WHEN e_emps_remaining THEN DBMS_OUTPUT.PUT_LINE ('Cannot remove dept ‘معالجة الاستثناء ||TO_CHAR(v_deptno) || '. Employees exist. '); END;

11 معالجة الاستثناءات 3- الاستثناءات المعرفة من قبل المستخدم:
هي عبارة عن أي حدث يعتبره المستخدم خطأ يوجب وقف تنفيذ ال(Block),وعلى المستخدم تعريفه في جزء التعريفات وإظهاره باستخدام (RAISE). للتعامل مع هذا النوع من الاستثناءات: 1- نقوم بتعريف الاستثناء في الجزء التعريفي لل(Block): DECLARE ….. Exception_name EXCEPTION; 2- إظهار الاستثناء في الجزء التنفيذي من ال(Block) نتيجة أي حدث يعتبره المستخدم خطأ عن طريق استخدام (RAISE) Begin …. RAISE Exception_name ; 3- معالجة الاستثناء في جزء الاستثناءات في وحدة ال(Block): يتم ذلك عن طريق كتابة : WHEN Exception_name THEN كتابة الجمل الناسبة للمعالجة

12 معالجة الاستثناءات (الاستثناءات المعرفة من قبل المستخدم)
معالجة الاستثناءات (الاستثناءات المعرفة من قبل المستخدم) في جزء التعريفات في الجزء التنفيذي في جزء الاستثناءات

13 معالجة الاستثناءات (الاستثناءات المعرفة من قبل المستخدم)
معالجة الاستثناءات (الاستثناءات المعرفة من قبل المستخدم) DECLARE -مثال: e_invalid_ product EXCEPTION; تعريف الاستثناء BEGIN UPDATE product SET descrip = '&product_description' WHERE prodid = &product_number; IF SQL%NOTFOUND THEN RAISE e_invalid_product; إظهار الاستثناء نتيجة لعدم إتمام عملية التعديل END IF; COMMIT; EXCEPTION WHEN e_invalid_product THEN معالجة الاستثناء DBMS_OUTPUT.PUT_LINE('Invalid product number.'); END;

14 استثناء معرف من قبل المستخدم
معالجة الاستثناءات استخدام SQLCODE وSQLERRM : SQLCODE و SQLERRMعبارة عن دوال يمكن استخدامها في معالجة الاستثناءات. SQLCODE : دالة تعيد رقم الخطأ الذي حدث. SQLERRM : دالة تعيد رسالة وصف للخطأ الذي حدث. SQLCODE الوصف لم يظهر أي استثناء 1 استثناء معرف من قبل المستخدم 100+ NO_DATA_FOUND رقم سالب ORECALE أي خطأ من أخطاء

15 النتيجة من تنفيذ الوحدة(Block)
معالجة الاستثناءات DECLARE v_deptno NUMBER := 500; v_name VARCHAR2 (20) := 'Testing'; e_invalid_dept EXCEPTION; BEGIN UPDATE departments SET department_name = v_name WHERE department_id = v_deptno; IF SQL%NOTFOUND THEN RAISE e_invalid_dept; END IF; ROLLBACK; EXCEPTION WHEN e_invalid_dept THEN DBMS_OUTPUT.PUT_LINE ('No such department'); DBMS_OUTPUT.PUT_LINE (SQLERRM); DBMS_OUTPUT.PUT_LINE (SQLCODE); END; / PL/SQL procedure successfully completed. The command succeeded النتيجة من تنفيذ الوحدة(Block) No such department User-Defined Exception 1

16 معالجة الاستثناءات ماذا يحدث إذا لم يتم معالجة الاستثناء؟
ظهور الاستثناء يؤدي إلى توقف الوحدة وإذا لم تتم معالجته فإنه سينتقل إلى المكان الذي تمت منه عملية استدعاء الوحدة ,وإذا لم تتم المعالجة سينتقل للبيئة التي استدعته وهكذا ... حتى يصل أول مكان تمت منه عملية التنفيذ.

17 مثال DECLARE e_no_rows EXCEPTION; e_integrity EXCEPTION; PRAGMA EXCEPTION_INIT (e_integrity, -2292); BEGIN FOR c_record IN emp_cursor LOOP SELECT ... UPDATE ... IF SQL%NOTFOUND THEN RAISE e_no_rows; END IF; EXCEPTION WHEN e_integrity THEN ... WHEN e_no_rows THEN ... END; END LOOP; WHEN NO_DATA_FOUND THEN WHEN TOO_MANY_ROWS THEN . . . إذا لم تتم معالجة الاستثناء في هذه الوحدة فإنه سينتقل إلى الوحدة الذي جاء منها وهي الوحدة الرئيسية في هذه الحالة إذا لم تتم معالجة الاستثناء في هذه الوحدة فإنه سينتقل إلى الوحدة الذي جاء منها وهيSQL*Plus البيئة الخارجية في هذه الحالة

18 الخلاصة ماهي الاستثناءات أنواع الاستثناءات الثلاثة
كيفية معالجة كل نوع من الاستثناءات


Download ppt "معالجة الاستثناءات."

Similar presentations


Ads by Google