1 / 18

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

معالجة الاستثناءات. الاستثناءات. ماهي الاستثناءات؟ الاستثناءات عبارة عن الأخطاء التي ممكن أن تظهر خلال عملية تنفيذ وحدة ( Block ) وفي حال ظهورها تؤدي إلى وقف عملية التنفيذ. الاستثناءات. تنقسم الاستثناءات إلى 3 أقسام: 1- الأخطاء المعرفة مسبقا ( Predefined Oracle Server errors )

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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 exception2 . . .] THEN statement1; statement2; . . . [WHEN exception3 [OR exception4 . . .] THEN statement1; statement2; . . .] [WHEN OTHERS THEN statement1; statement2; . . .] هنا تتم معالجة الاستثناءات والإمساك بها

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

  6. معالجة الاستثناءات (الأخطاء المعرفة مسبقا) • مثال: DECLARE v_enameemp.ename%Type; v_empnoemp.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_enameemp.ename%Type; v_jobemp.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_FOUNDTHEN DBMS_OUTPUT.PUT_LINE ('There is no Employee has this '|| v_job); WHENTOO_MANY_ROWSTHEN 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); ربط الاستثناء مع الخطأ رقم 2292- v_deptnodept.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 : دالة تعيد رسالة وصف للخطأ الذي حدث.

  15. معالجة الاستثناءات 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 BEGIN 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; EXCEPTION WHEN NO_DATA_FOUND THEN . . . WHEN TOO_MANY_ROWS THEN . . . END; إذا لم تتم معالجة الاستثناء في هذه الوحدة فإنه سينتقل إلى الوحدة الذي جاء منها وهي الوحدة الرئيسية في هذه الحالة إذا لم تتم معالجة الاستثناء في هذه الوحدة فإنه سينتقل إلى الوحدة الذي جاء منها وهيSQL*Plus البيئة الخارجية في هذه الحالة

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

More Related