2015-12-04 33 views
6

Tôi có một số thủ tục được viết bằng Oracle. Thật không may tôi không thể hiển thị mã của nó. Một nơi nào đó bên trong nó là chọn nơi thực hiện bị rơi vì thiếu dữ liệu cần thiết. Nó trông như thế nàySự khác biệt giữa gọi oracle và thực hiện trong bối cảnh lỗi khi ném

select value into l_value 
     from config 
     where code = upper(p_code); 

Vì vậy, khi tôi gọi thủ tục này như thế này (trong SqlDeveloper)

execute some_package.some_procedure('CODE'); 

nó ném

Error report - 
ORA-01403: no data found 
ORA-06512: at "XXXXXXXXXXXXXXXXXXX", line 111 
ORA-06512: at "XXXXXXXXXXXXXXXXXXX", line 111 
ORA-06512: at line 1 
01403. 00000 - "no data found" 
*Cause: No data was found from the objects. 
*Action: There was no data from the objects which may be due to end of fetch. 

Nhưng khi tôi gọi nó là như thế này

call some_package.some_procedure('CODE'); 

sự cố ở lần thứ e cùng một nơi (như tôi có thể đề xuất từ ​​kết quả, được lưu trữ trong DB), nhưng nó không ném một ngoại lệ.

some_package.some_procedure('CODE') succeeded. 

Điều gì xảy ra? Và tại sao có sự khác biệt như vậy?

Trả lời

12

NO_DATA_FOUND hành vi ngoại lệ là đặc biệt. Nó được xử lý theo mặc định trong ngữ cảnh SQL nhưng không phải trong PL/SQL. Trong SQL không tìm thấy dữ liệu không được coi là một lỗi, nó xảy ra tất cả các thời gian mà không có dữ liệu đáp ứng điều kiện nhất định.

CALL là lệnh SQL trong khi EXEC là phím tắt cho BEGIN <code> END; là PL/SQL.

Các vấn đề liên quan