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