Oracle PL/SQL에서 커서는 데이터베이스 테이블의 행을 순차적으로 처리할 때 사용됩니다. 커서를 사용하는 일반적인 단계는 다음과 같습니다.
커서를 선언하고, 어떤 SQL 쿼리의 결과를 순회할지 정의합니다.
선언된 커서를 열어 쿼리를 실행하고, 결과 집합을 준비합니다.
열린 커서에서 데이터를 한 행씩 가져와서 PL/SQL의 변수에 저장합니다.
더 이상 처리할 데이터가 없을 경우 루프를 종료합니다.
커서를 닫아서, 관련된 시스템 리소스를 해제합니다.
이 과정을 구체적인 예로 설명하면 다음과 같습니다.
DECLARE
CURSOR emp_cursor IS SELECT * FROM employees; -- 커서 선언: employees 테이블의 모든 데이터를 선택
emp_record emp_cursor%ROWTYPE; -- emp_cursor의 각 행을 저장할 변수 선언
BEGIN
OPEN emp_cursor; -- 커서를 열어 SQL 쿼리 실행
LOOP
FETCH emp_cursor INTO emp_record; -- 커서에서 데이터를 한 행씩 emp_record에 저장
EXIT WHEN emp_cursor%NOTFOUND; -- 더 이상 데이터가 없으면 루프 종료
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_record.name); -- 출력
END LOOP;
CLOSE emp_cursor; -- 커서를 닫고 리소스 해제
END;
/
PostgreSQL에서는 RECORD 타입을 사용하여 SQL 쿼리 결과를 저장하고, 각 행에 대해 반복 처리를 수행합니다.
PostgreSQL의 커서 사용 방식은 Oracle보다 간결한 경우가 많으며, LOOP 구문 내에서 직접 쿼리를 실행하고 결과를 순회할 수 있습니다.
DO $$
DECLARE
emp_record RECORD; -- RECORD 타입 선언
BEGIN
FOR emp_record IN SELECT * FROM employees LOOP -- employees 테이블을 순회
RAISE NOTICE 'Employee Name: %', emp_record.name; -- 각 행의 이름을 출력
END LOOP;
END $$;