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

Các khối lồng nhau có bất kỳ tác động đến hiệu suất nào trong các thủ tục PL / SQL không?

Họ dường như không:

set timing on
set serveroutput on

declare
  x number := 0;
begin
  dbms_output.put_line('No inner blocks');
  for i in 1..1000000 loop
    x := x + 1;
  end loop;
  dbms_output.put_line(x);
end;
/

anonymous block completed
Elapsed: 00:00:00.095
No inner blocks
1000000

Chạy cùng một lúc, với một chút thay đổi theo mỗi cách, như:

declare
  x number := 0;
begin
  dbms_output.put_line('Nested inner blocks');
  for i in 1..1000000 loop
    begin
      begin
        begin
          begin
            x := x + 1;
          exception
            when others then
              raise;
          end;
        exception
          when others then
            raise;
        end;
      exception
        when others then
          raise;
      end;
    exception
      when others then
        raise;
    end;
  end loop;
  dbms_output.put_line(x);
end;
/

anonymous block completed
Elapsed: 00:00:00.090
Nested inner blocks
1000000

Tất nhiên có thể trình biên dịch đang loại bỏ các lớp thừa, nhưng tôi không chắc nó thực sự có thể với các trình xử lý ngoại lệ ở đó vì nó sẽ ảnh hưởng đến kết quả.

Tôi không thấy bất kỳ giới hạn nào về cách các khối lồng nhau sâu có thể đi - tài liệu chỉ nói 'các khối có thể được lồng vào nhau'. Mô hình bạn đang sử dụng, bắt một lỗi cụ thể và cho phép người khác phổ biến, là tốt và khá chuẩn - mặc dù rõ ràng trong ví dụ do bạn tạo ra thì điều đó là không cần thiết, nhưng bạn biết điều đó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle mời dịch vụ REST từ pl / sql

  2. Tại sao mệnh đề IN oracle chỉ có giới hạn 1000 đối với dữ liệu tĩnh?

  3. Lỗi Oracle 11.1 khi chuyển đổi số ngày Julian thành DATE hoặc TIMESTAMP

  4. Nhóm các hàng Giữ thứ tự các giá trị

  5. tạo chuỗi trong oracle