Cursor란?

Cursor는 SQL 결과 집합을 한 줄씩 처리하기 위해 사용하는 메모리 공간 또는 처리 방식이다.

Fetch란?

Fetch는 커서에서 한 행의 결과를 읽어오는 동작을 말한다.

🧱 Oracle Cursor 종류

Cursor 종류 기능
명시적 Cursor 사용자가 선언해서 직접 사용하는 SQL Cursor. 주로 여러 행을 처리할 때 사용한다.
암시적 Cursor Oracle이 자동으로 생성하는 Cursor로, 사용자가 직접 선언하지 않는다.

🔄 Oracle Cursor 사용 순서

  1. Cursor를 선언한다.
  2. Cursor를 연다.
  3. Cursor에서 데이터를 Fetch한다.
  4. Cursor를 닫는다.

🔍 Cursor 개수 확인 방법

SQL Cursor 개수를 확인할 수 있다.

SELECT SQL_TEXT, COUNT(SID) CNT
FROM V$OPEN_CURSOR
GROUP BY SQL_TEXT
ORDER BY CNT DESC;

Oracle 프로세스에서 열려 있는 Cursor 개수를 확인할 수도 있다.

SELECT SID, COUNT(SID) cursorcount
FROM V$OPEN_CURSOR
WHERE USER_NAME = 'MY_USER'
GROUP BY SID
ORDER BY cursorcount DESC;

caution

여러 문장에서 동시에 많은 SQL을 실행하고 결과를 제대로 닫지 않으면, 커서 부족 문제가 발생할 수 있다.

커서 부족으로 인해 발생하는 대표적인 오류가 ORA-01000: maximum open cursors exceeded이다.

Cause: java.sql.SQLException: ORA-01000: maximum open cursors exceeded

🧩 정리

  • Cursor는 결과 집합을 순차적으로 처리할 때 사용한다.
  • Fetch는 커서에서 한 행을 읽는 동작이다.
  • Cursor를 닫지 않으면 커서 누수 문제가 생길 수 있다.

연결문서

댓글남기기