sys_refcursor

2024. 9. 9. 02:35DBMS/PLSQL

반응형

sys_refcursor는 PL/SQL 프로시저나 함수 내에서 결과 집합을 반환하는 데 사용되는 데이터 타입이다. 주로 저장 프로시저나 함수에서 여러 행의 데이터를 반환한다.

 sys_refcursor의 주요 사용 목적:
- 다중 행 데이터 반환: 저장 프로시저나 함수가 쿼리 결과를 반환할 때, 여러 행을 반환하는 용도로 사용된다.
- 다른 프로그램과의 연동: sys_refcursor로 반환된 데이터를 다른 프로그램이나 쿼리에서 활용할 수 있어 유연성이 좋다.

 

 

  • 직원 정보를 저장하는 employees 테이블이 있다고 가정.
  • 이 테이블에서 모든 직원을 검색하는 프로시저를 만들고, 그 결과를 sys_refcursor로 반환하여 다른 프로그램에서 사용할 수 있도록 설정

 

CREATE TABLE employees (
    employee_id NUMBER PRIMARY KEY,
    first_name VARCHAR2(50),
    last_name VARCHAR2(50),
    salary NUMBER
);

 

 

 

CREATE OR REPLACE PROCEDURE get_all_employees(p_cursor OUT sys_refcursor) IS
BEGIN
    -- 모든 직원 정보를 반환하는 쿼리 실행
    OPEN p_cursor FOR
    SELECT employee_id, first_name, last_name, salary
    FROM employees;
END;
/

 

  • p_cursor: 이 인자는 OUT 파라미터로 사용되어 프로시저 외부에서 커서를 참조할 수 있다.
  • OPEN p_cursor FOR: sys_refcursor를 열어주고, SELECT 문을 실행하여 그 결과를 반환한다.

 

DECLARE
    emp_cursor sys_refcursor;  -- sys_refcursor 변수 선언
    emp_id NUMBER;
    f_name VARCHAR2(50);
    l_name VARCHAR2(50);
    sal NUMBER;
BEGIN
    -- 프로시저 호출
    get_all_employees(emp_cursor);
    
    -- 커서를 사용해 데이터를 출력
    LOOP
        FETCH emp_cursor INTO emp_id, f_name, l_name, sal;
        EXIT WHEN emp_cursor%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE('ID: ' || emp_id || ', Name: ' || f_name || ' ' || l_name || ', Salary: ' || sal);
    END LOOP;
    
    -- 커서 닫기
    CLOSE emp_cursor;
END;
/

 

반응형