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

Click here to load reader

Upload: orson-bailey

Post on 01-Jan-2016

33 views

Category:

Documents


3 download

DESCRIPTION

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

TRANSCRIPT

(Block) .

3 :1- (Predefined Oracle Server errors)

2- (Non-Predefined Oracle server errors)

3- (User Defined Exceptions)

(Block) DECLARE....BEGIN.EXCEPTION WHEN exception1 [OR exception2 . . .] THEN statement1; statement2; . . . [WHEN exception3 [OR exception4 . . .] THEN statement1; statement2; . . .] [WHEN OTHERS THEN statement1; statement2; . . .] 1- (Predefined Oracle Server errors): 20 , (Block) . :

ZERO_DEVIDE VALUE_ERROR TOO_MANY_ROWS (Select) NO_DATA_FOUND (Select) NOT_LOGGED_ON . ( ):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;: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; ( ) 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 ( ).

( )DECLARE -: e_emps_remaining EXCEPTION;

PRAGMA EXCEPTION_INIT ( e_emps_remaining , -2292); 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; ( ) 3- : (Block), (RAISE).

:1- (Block):DECLARE..Exception_name EXCEPTION;2- (Block) (RAISE)Begin.RAISE Exception_name ;.3- (Block): :WHEN Exception_name THEN

( )

12DECLARE -: 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; ( ) SQLCODE SQLERRM : SQLCODE SQLERRM .SQLCODE : .SQLERRM : .

SQLCODE 0 1 100+NO_DATA_FOUND ORECALE 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 No such department User-Defined Exception 1

(Block) , ... .

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