Nâng caoOracle Cursor ~15 phút

Explicit cursor — OPEN / FETCH / CLOSE

Explicit cursor cho phép PL/SQL đọc một query nhiều dòng từng record một, nhưng lập trình viên phải quản lý đúng OPEN, FETCH và CLOSE.

Lý thuyết

Lifecycle

1. CURSOR c IS SELECT ... khai báo query nhưng chưa chạy.

2. OPEN c chạy query và tạo active result set.

3. FETCH c INTO ... đọc dòng hiện tại rồi tiến con trỏ.

4. EXIT WHEN c%NOTFOUND dừng sau lần FETCH không còn dòng.

5. CLOSE c giải phóng cursor.

Cursor attributes

  • c%ISOPEN: cursor đang mở hay không.
  • c%ROWCOUNT: số lần FETCH thành công.
  • c%FOUND / c%NOTFOUND: trạng thái của FETCH gần nhất.

Phải FETCH trước rồi mới kiểm tra %NOTFOUND. Nếu kiểm tra trước FETCH, loop có thể xử lý sai hoặc chạy vô hạn.

Khi nào dùng?

Dùng explicit cursor khi cần kiểm soát lifecycle hoặc fetch theo batch. Nếu chỉ loop đơn giản, cursor FOR LOOP ngắn và an toàn hơn.

Luôn CLOSE cursor ở mọi đường đi, kể cả khi exception. Cursor FOR LOOP giúp tránh phần cleanup thủ công này.

Thuật ngữ (di chuột để xem giải thích)

Dữ liệu mẫu

Đang tải dữ liệu mẫu…