Sobes.tech
Middle

Cum se returnează o valoare dintr-o procedură folosind un cursor (REF CURSOR)?

sobes.tech AI

Răspuns de la AI

În Oracle PL/SQL, pentru a returna un set de rânduri dintr-o procedură, se folosește adesea REF CURSOR. Este un pointer către rezultatul unei interogări, care poate fi deschis în interiorul procedurii și returnat codului apelant.

Exemplu de procedură cu parametru OUT de tip REF CURSOR:

CREATE OR REPLACE PROCEDURE get_employees(p_dept_id IN NUMBER, p_refcur OUT SYS_REFCURSOR) AS
BEGIN
  OPEN p_refcur FOR
    SELECT employee_id, first_name, last_name
    FROM employees
    WHERE department_id = p_dept_id;
END;
/

Apel dintr-un bloc PL/SQL:

DECLARE
  rc SYS_REFCURSOR;
  emp_id employees.employee_id%TYPE;
  fname employees.first_name%TYPE;
  lname employees.last_name%TYPE;
BEGIN
  get_employees(10, rc);
  LOOP
    FETCH rc INTO emp_id, fname, lname;
    EXIT WHEN rc%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(emp_id || ' ' || fname || ' ' || lname);
  END LOOP;
  CLOSE rc;
END;
/

Astfel, procedura deschide un REF CURSOR cu interogarea necesară, iar codul apelant citește datele din acesta.