Sobes.tech
Middle

Hoe retourneer je een waarde uit een procedure met behulp van een cursor (REF CURSOR)?

sobes.tech AI

Antwoord van AI

In Oracle PL/SQL wordt vaak REF CURSOR gebruikt om een set rijen uit een procedure terug te geven. Het is een pointer naar het resultaat van een query, dat binnen de procedure geopend kan worden en aan de aanroepende code kan worden teruggegeven.

Voorbeeld van een procedure met een OUT-parameter van het type 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;
/

Aanroep vanuit een PL/SQL-blok:

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;
/

Op deze manier opent de procedure een REF CURSOR met de benodigde query, en leest de aanroepende code de gegevens eruit.