Sobes.tech
Middle

Wie gibt man einen Wert aus einem Verfahren mit einem Cursor (REF CURSOR) zurück?

sobes.tech KI

Antwort von AI

In Oracle PL/SQL wird häufig REF CURSOR verwendet, um eine Ergebnismenge aus einer Prozedur zurückzugeben. Es ist ein Zeiger auf das Ergebnis einer Abfrage, das innerhalb der Prozedur geöffnet und an den aufrufenden Code zurückgegeben werden kann.

Beispiel einer Prozedur mit OUT-Parameter vom Typ 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;
/

Aufruf aus einem PL/SQL-Block:

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

Auf diese Weise öffnet die Prozedur einen REF CURSOR mit der erforderlichen Abfrage, und der aufrufende Code liest die Daten daraus.