Oracle Cursor
Cursor란?
Cursor는 SQL 결과 집합을 한 줄씩 처리하기 위해 사용하는 메모리 공간 또는 처리 방식이다.
Fetch란?
Fetch는 커서에서 한 행의 결과를 읽어오는 동작을 말한다.
🧱 Oracle Cursor 종류
| Cursor 종류 | 기능 |
|---|---|
| 명시적 Cursor | 사용자가 선언해서 직접 사용하는 SQL Cursor. 주로 여러 행을 처리할 때 사용한다. |
| 암시적 Cursor | Oracle이 자동으로 생성하는 Cursor로, 사용자가 직접 선언하지 않는다. |
🔄 Oracle Cursor 사용 순서
- Cursor를 선언한다.
- Cursor를 연다.
- Cursor에서 데이터를 Fetch한다.
- 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를 닫지 않으면 커서 누수 문제가 생길 수 있다.
댓글남기기