Sobes.tech
Middle

Kā atgriezt vērtību no procedūras, izmantojot REF CURSOR?

sobes.tech AI

Atbilde no AI

Oracle PL/SQL bieži izmanto REF CURSOR, lai atgrieztu rindu kopu no procedūras. Tas ir norādītājs uz vaicājuma rezultātu, kuru var atvērt procedūras iekšienē un atgriezt izsaucējam kodam.

Piemērs ar OUT parametru, kura tips ir 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;
/

Izsaukums no PL/SQL bloka:

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

Tādējādi, procedūra atver REF CURSOR ar nepieciešamo vaicājumu, un izsaucējs kods lasa datus no tā.