Nâng caoOracle Cursor ~15 phút

SYS_REFCURSOR — trả result set cho caller

SYS_REFCURSOR là weak ref cursor thường dùng để trả một result set nhiều dòng từ PL/SQL sang application hoặc block gọi.

Lý thuyết

Ref cursor khác explicit cursor

Explicit cursor gắn với query cố định trong declaration. Ref cursor là biến/handle có thể được OPEN ... FOR một query lúc runtime.

SYS_REFCURSOR là weak type: nhiều query có shape khác nhau có thể gắn vào cùng kiểu handle.

Ownership

Procedure mở cursor và trả handle qua OUT. Caller sở hữu handle sau đó: FETCH cho tới %NOTFOUND và CLOSE.

Nếu caller quên CLOSE, session giữ tài nguyên và có thể chạm giới hạn OPEN_CURSORS.

Static và dynamic OPEN FOR

  • Static: OPEN p_result FOR SELECT ... WHERE city = p_city;.
  • Dynamic: OPEN p_result FOR v_sql USING p_value; với bind variables.

Không nối trực tiếp input vào dynamic SQL; luôn dùng bind để tránh SQL Injection.

Application integration

Oracle drivers thường map SYS_REFCURSOR thành ResultSet/DataReader. Transaction và connection phải còn sống trong lúc consumer đọc.

Ref cursor phù hợp khi API database cần trả nhiều dòng. Với một scalar, OUT parameter hoặc function đơn giản hơn.

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

Dữ liệu mẫu

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