CREATE OR REPLACE PROCEDURE usp_VinhTest( i_a IN NUMBER, i_b IN NUMBER) AS MyException EXCEPTION; BEGIN IF i_b=0 THEN raise MyException; END IF; EXCEPTION WHEN MyException THEN dbms_output.put_line('My Exception'); WHEN OTHERS THEN dbms_output.put_line('Generic Exception'); END;
Tiếp theo là vấn đề khi sử dụng Implicit Cursor trong Oracle, nếu không có dòng nào trả về, một Exception có tên là no_data_found sẽ được quăng ra, và ta phải xử lý nó trong code của mình
DECLARE l_descr hardware.descr%type; BEGIN SELECT descr INTO l_descr FROM hardware WHERE aisle = 0 AND item = 0; dbms_output.put_line('Item was found'); EXCEPTION WHEN no_data_found THEN dbms_output.put_line('Invalid item specified'); END;
Với đoạn code trên, nếu ta chuyển sang bulk mode, một lưu ý rất quan trọng là no_data_found exception sẽ không được quăng ra nếu không có data được tìm thấy, ta phải viết lại như sau:
DECLARE type t_descr_list IS TABLE OF hardware.descr%type; l_descr_list t_descr_list; BEGIN SELECT descr bulk collect INTO l_descr_list FROM hardware WHERE aisle = 0 AND item = 0; IF l_descr_list.count = 0 THEN raise no_data_found; END IF; dbms_output.put_line('Item was found'); EXCEPTION WHEN no_data_found THEN dbms_output.put_line('Invalid item specified'); END;
0 comments:
Post a Comment