일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- programmers
- security
- 소스트리
- springSecurity
- 리눅스
- 시큐리티
- 시큐리티 로그인
- css
- 싱글톤
- 코딩테스트
- javascript
- 스프링 부트
- Spring boot
- springboot
- gradle
- 로그인
- 목록
- input태그
- 프로그래머스
- html
- 시큐리티로그인
- 반복문
- 2차원배열
- java
- 시큐리티 로그아웃
- codingtest
- sql
- Linux
- StyleSheet
- JAVA11
Archives
- Today
- Total
JAVAIARY
커서(Cursor)란? 본문
1. 커서(Cursor)
1) 개념
쿼리문의 처리 결과가 저장되어 있는 메모리 공간을 가리키는 포인터(Pointer)
ex) select * from 테이블 where 이름 = '나봉순'
ID | 이름 | 성별 | 나이 |
01 | 나봉순 | 여 | 25 |
==> 쿼리문의 결과(특정 행들의 모음)를 저장하는 메모리공간을 가리킴
2) 종류
- 묵시적 커서 : 내부에서 자동으로 생성되어 사용
- 명시적 커서 : 사용자가 직접 정의해서 사용
3) 커서의 사용
- 3 단계로 진행 ( 열기-Open, 패치-Fetch, 닫기-Close)
- 묵시적 커서
- 각 단계가 자동으로 수행
- 수행된 쿼리문의 정상적인 수행 여부 확인을 위해 사용
- 명시적 커서
- 진행을 직접 구현해야 함
- 쿼리문의 결과를 저장하여 사용함으로써 동일한 쿼리가 반복 수행되어 데이터베이스 자원 낭비를 방지
2. 묵시적 커서와 명시적 커서
1) 묵시적 커서(Implicit Cursor)
- DBMS 자체적으로 open, fetch되어 사용이 끝나면 close됨
- but, 커서 속성을 조회하여 사용된 쿼리 정보 열람 가능
SQL%FOUND | 쿼리 수행의 결과로 패치된 튜플 수가 1개 이상이면 TRUE |
SQL%NOTFOUND | 쿼리 수행의 결과로 패치된 튜플 수가 0개이면 TRUE |
SQL%ROWCOUNT | 쿼리 수행의 결과로 패치된 튜플 수 반환 |
SQL%ISOPEN | 커서가 OPEN 상태이면 TRUE 묵시적 커서는 자동 생성 후 자동으로 닫히기 때문에 항상 FALSE |
2) 명시적 커서(Explicit Cursor)
- 사용자가 직접 정의해서 사용하는 커서
- 주로 절차형 SQL에서 SELECT문의 결과로 반환되는 여러 튜플들을 제어하기 위해 사용됨
- 열기(OPEN)-패치(FETCH)-닫기(CLOSE)순으로 이루어지며,
명시적 커서로 사용하기 위해서는 OPEN전에 선언(DECLARE)해야 함
- 선언(DECLARE) 형식
CURSOR 커서명(매개변수 1, 매개변수 2, ...)
IS
SELECT문;
- 열기(OPEN) 형식
OPEN 커서명(매개변수 1, 매개변수 2, ...);
- 패치(FETCH) 형식
- 변수는 SELECT 문으로 가져온 데이터들과 자료형/크기가 같아야 함
FETCH 커서명 INTO 변수 1, 변수 2...;
- 닫기(CLOSE) 형식
CLOSE 커서명;
3. 예제
DECLARE
p_name EMPLOYEE.NAME%TYPE
CURSOR CUR_NAME(ff INT)
IS
SELECT name FROM employee WHERE id >= ff;
BEGIN
OPEN cur_name(20);
LOOP
FETCH cur_name INTO p_name;
EXIT WHEN cur_name%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(p_name);
END LOOP;
CLOSE cur_name;
END;
- 테이블명.속성명%TYPE : 해당 테이블의 해당 속성의 자료형
'lectureNote > SQL' 카테고리의 다른 글
PL/SQL) ORACLE 유저 생성/권한/삭제 (0) | 2024.01.30 |
---|---|
사용자 정의 함수 (0) | 2023.07.09 |
트리거 (TRIGGER) (0) | 2023.07.05 |
프로시저 (PROCEDURE) 생성, 실행 , 삭제 (0) | 2023.07.05 |
Oracle) NVL, UNION, OUTERJOIN표현식 (1) | 2023.06.04 |