Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Ngoại lệ NO_DATA_FOUND không được ném khi được sử dụng trong CHỌN VÀO

Một ví dụ tối thiểu là:

CREATE FUNCTION raise_exception RETURN INT
IS
BEGIN
  RAISE NO_DATA_FOUND;
END;
/

Nếu bạn làm như vậy:

SELECT raise_exception
FROM   DUAL;

Bạn sẽ nhận được một hàng có chứa NULL value - Hỏi Tom trạng thái:

và sau đó theo dõi với:

Vì vậy, ngoại lệ được đưa ra trong hàm và máy khách SQL thấy điều này và giải thích điều này là không có dữ liệu nào là NULL giá trị và "xử lý" ngoại lệ.

Vì vậy,

DECLARE
  variable_name VARCHAR2(50);
BEGIN
  SELECT raise_exception
  INTO   variable_name
  FROM   DUAL
END;
/

Sẽ thành công dưới dạng DUAL bảng có một hàng duy nhất và ngoại lệ từ hàm sẽ được xử lý (âm thầm) và biến sẽ chứa một NULL giá trị.

Tuy nhiên,

BEGIN
  DBMS_OUTPUT.PUT_LINE( raise_exception );
END;
/

Ngoại lệ là lần này được chuyển từ hàm sang phạm vi PL / SQL - không xử lý lỗi và chuyển ngoại lệ cho khối xử lý ngoại lệ (không tồn tại) để sau đó được chuyển đến phạm vi ứng dụng và chấm dứt thực thi của chương trình.

Và Ask Tom nói:

Bây giờ, nếu chúng ta thay đổi hàm để đưa ra một ngoại lệ khác:

CREATE OR REPLACE FUNCTION raise_exception RETURN INT
IS
BEGIN
  RAISE ZERO_DIVIDE;
END;
/

Sau đó, cả hai:

SELECT raise_exception
FROM   DUAL;

và:

BEGIN
  DBMS_OUTPUT.PUT_LINE( raise_exception );
END;
/

không biết cách xử lý ngoại lệ và kết thúc bằng ORA-01476 divisor is equal to zero .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi quy trình được lưu trữ PLS-00201:mã định danh 'UTL_HTTP' phải được khai báo

  2. Cách định dạng ngày từ Oracle thành ngày giờ hợp lệ trong c #

  3. cung cấp tên người dùng và mật khẩu chính xác, nhận được ORA-01017:tên người dùng / mật khẩu không hợp lệ; Đăng nhập đã bị từ chối

  4. Oracle SQL tạo ngày từ các bộ phận

  5. làm thế nào để trích xuất định dạng ngày từ một oracle chuỗi