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

Oracle PL / SQL - Các ngoại lệ NO_DATA_FOUND có ảnh hưởng xấu đến hiệu suất thủ tục được lưu trữ không?

Tôi sẽ không sử dụng một con trỏ rõ ràng để làm điều này. Steve F. không còn khuyên mọi người sử dụng con trỏ rõ ràng khi con trỏ ẩn có thể được sử dụng.

Phương thức với count(*) là không an toàn. Nếu một phiên khác sẽ xóa hàng đáp ứng điều kiện sau dòng có count(*) và trước dòng có select ... into , mã sẽ đưa ra một ngoại lệ sẽ không được xử lý.

Phiên bản thứ hai từ bài đăng gốc không có vấn đề này và nó thường được ưu tiên hơn.

Điều đó nói rằng, có một chi phí nhỏ khi sử dụng ngoại lệ và nếu bạn chắc chắn 100% dữ liệu sẽ không thay đổi, bạn có thể sử dụng count(*) , nhưng tôi khuyên bạn không nên làm như vậy.

Tôi đã chạy các điểm chuẩn này trên Oracle 10.2.0.1 trên Windows 32 bit . Tôi chỉ nhìn vào thời gian đã trôi qua. Có những bộ dây kiểm tra khác có thể cung cấp thêm thông tin chi tiết (chẳng hạn như số lượng chốt và bộ nhớ được sử dụng).

SQL>create table t (NEEDED_FIELD number, COND number);
SQL>insert into t (NEEDED_FIELD, cond) values (1, 0);
declare
  otherVar  number;
  cnt number;
begin
  for i in 1 .. 50000 loop
     select count(*) into cnt from t where cond = 1;

     if (cnt = 1) then
       select NEEDED_FIELD INTO otherVar from t where cond = 1;
     else
       otherVar := 0;
     end if;
   end loop;
end;
/
declare
  otherVar  number;
begin
  for i in 1 .. 50000 loop
     begin
       select NEEDED_FIELD INTO otherVar from t where cond = 1;
     exception
       when no_data_found then
         otherVar := 0;
     end;
   end loop;
end;
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi có thể chuyển một số cho varchar2 trong Oracle không?

  2. Tại sao tôi nhận được #### trong cột NUMBER sau định dạng?

  3. Làm cách nào để thay đổi văn bản nhãn của nút nhấn và thêm chức năng mới trong thời gian chạy? Biểu mẫu Oracle

  4. Trả về kết quả truy vấn dưới dạng danh sách được phân tách bằng dấu phẩy trong Oracle

  5. Tạo Java trên cơ sở dữ liệu Oracle với JDBC