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

Con trỏ lồng nhau trong một con trỏ

Thông thường, bạn sẽ chỉ tham gia hai bảng.

FOR some_cursor IN (SELECT s.col1,
                           s.col2
                      FROM sometable s
                           JOIN temp_table t ON (s.col3 = t.col1))
LOOP
  <<do something>>
END LOOP

Tuy nhiên, vì bạn lo lắng về hiệu quả

  • TEMP_TABLE thực sự là một bảng tạm thời? Nếu vậy, tại sao? Rất hiếm khi Oracle thực sự cần sử dụng các bảng tạm thời, điều đó khiến tôi nghi ngờ rằng có lẽ bạn đang làm điều gì đó không hiệu quả để điền bảng tạm thời ngay từ đầu.
  • Tại sao bạn có con trỏ FOR vòng lặp để xử lý dữ liệu từ TEMP_TABLE ? Xử lý từng hàng là cách chậm nhất để thực hiện bất kỳ điều gì trong PL / SQL, vì vậy, nó thường được tránh nếu bạn lo lắng về hiệu quả. Từ quan điểm hiệu suất, bạn muốn tối đa hóa SQL để thay vì thực hiện một vòng lặp đã thực hiện một loạt INSERT một hàng hoặc UPDATE hoạt động, bạn sẽ thực hiện một INSERT hoặc UPDATE đã sửa đổi toàn bộ tập hợp các hàng. Nếu bạn thực sự cần xử lý dữ liệu theo khối, thì đó là nơi mà các tập hợp PL / SQL và xử lý hàng loạt sẽ phát huy tác dụng nhưng điều đó sẽ không hiệu quả bằng SQL thẳng.
  • Tại sao bạn có DISTINCT trong truy vấn của bạn với TEMP_TABLE ? Bạn có thực sự mong đợi rằng sẽ có big_id trùng lặp không các giá trị không bị sai sót? Hầu hết thời gian, mọi người sử dụng DISTINCT không chính xác hoặc để che đậy các vấn đề trong đó dữ liệu được kết hợp không chính xác hoặc nơi bạn đang buộc Oracle thực hiện một phân loại đắt tiền đề phòng trường hợp dữ liệu không chính xác được tạo ra trong tương lai khi một ràng buộc sẽ là cách thích hợp hơn để bảo vệ bạn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cơ sở dữ liệu Oracle cho phép phần thời gian không hợp lệ của các giá trị cột ngày giờ trong những trường hợp nào?

  2. Làm cách nào để giới hạn kích thước tập hợp kết quả cho truy vấn tùy ý trong Ingres?

  3. InstallAllOracleASPNETProviders không hoạt động chính xác

  4. Cách xóa tệp nhật ký lưu trữ trên phiên bản AWS RDS Oracle

  5. Cách lấy mục lớn thứ hai hoặc lớn thứ ba từ một bảng