Sobes.tech
Middle

Πώς επιστρέφουμε μια τιμή από μια διαδικασία χρησιμοποιώντας έναν δείκτη (REF CURSOR);

sobes.tech AI

Απάντηση από AI

Στην Oracle PL/SQL, για την επιστροφή ενός συνόλου γραμμών από μια διαδικασία, συχνά χρησιμοποιείται το REF CURSOR. Είναι ένας δείκτης στο αποτέλεσμα ενός ερωτήματος, που μπορεί να ανοίξει μέσα στη διαδικασία και να επιστραφεί στον κώδικα που την καλεί.

Παράδειγμα διαδικασίας με παράμετρο OUT τύπου 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;
/

Κλήση από ένα μπλοκ 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;
/

Έτσι, η διαδικασία ανοίγει έναν REF CURSOR με το απαραίτητο ερώτημα, και ο κώδικας που καλεί διαβάζει τα δεδομένα από αυτό.