Nâng caoOracle Cursor ~13 phút

Parameterized cursor và cursor FOR LOOP

Parameterized cursor biến query cursor thành template có input, còn cursor FOR LOOP loại bỏ phần lifecycle boilerplate.

Lý thuyết

Cursor có tham số

CURSOR c_department(p_dept VARCHAR2) IS SELECT ... WHERE department = p_dept;.

Tham số cursor chỉ dùng lúc OPEN hoặc trong cursor FOR LOOP và có scope bên trong query cursor.

Có thể mở cùng cursor nhiều lần với giá trị khác nhau, miễn đã CLOSE lần trước.

Cursor FOR LOOP

FOR r IN c_department('Sales') LOOP ... END LOOP; tự động:

  • OPEN cursor.
  • FETCH từng dòng vào record r có field theo tên cột.
  • EXIT khi hết dòng.
  • CLOSE cursor kể cả khi loop kết thúc hoặc exception truyền ra.

Không cần khai báo biến cho từng cột; dùng r.name, r.salary.

Query FOR LOOP

Có thể bỏ declaration: FOR r IN (SELECT ... ) LOOP. Cách này hợp với query chỉ dùng một lần.

Ưu tiên cursor FOR LOOP cho việc duyệt toàn bộ result set. Dùng explicit OPEN/FETCH khi cần fetch có kiểm soát hoặc truyền handle.

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

Dữ liệu mẫu

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