관리 메뉴

프로그래밍 삽질 중

SQL 커서 설명 및 예제 본문

과거 프로그래밍 자료들/SQL(Oracle)

SQL 커서 설명 및 예제

평부 2021. 3. 24. 19:13

※ 커서(중요 ★)
- 조회 때 나오는 결과 set, 결과 값이 여러 개일 때 효율적
- 실행 결과 테이블을 한번에 한 행씩 처리하기 위해 

테이블 행을 순서대로 가리키는 데 사용

- CURSOR<CURSOR 이름> IS <CURSOR정의> : 커서 생성
- OPEN <CURSOR 이름> : 커서 사용 시작
- FETCH <CURSOR 이름> INTO <변수> : 행 데이터를 가져옴, 커서에서 원하는 결과 추출
- CLOSE <CURSOR 이름> : 커서 사용 종료

 

gurubee.net))

 

 

[예제 1] - 커서(원하는 값 추출) 1개 값만 추출

결과 값 : 한여진 경찰

 

 

[예제 1 답]

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
32
33
34
35
--JOB 테이블 생성
CREATE
 TABLE JOB (
EMPNO NUMBER(4),
ENAME VARCHAR2(10),
JOB VARCHAR2(10),
DEPTNO NUMBER(2)
);
 
INSERT INTO JOB (EMPNO, ENAME, JOB, DEPTNO)
VALUES(001'한여진''경찰'24);
 
INSERT INTO JOB (EMPNO, ENAME, JOB, DEPTNO)
VALUES(002'황시목''검사'37);
 
INSERT INTO JOB (EMPNO, ENAME, JOB, DEPTNO)
VALUES(003'강원철''검사'50);
 
INSERT INTO JOB (EMPNO, ENAME, JOB, DEPTNO)
VALUES(004'장건''경찰'22);
 
INSERT INTO JOB (EMPNO, ENAME, JOB, DEPTNO)
VALUES(005'이연재''CEO'80);
 
SELECT * FROM JOB;
 
-- 커서 생성
DECLARE  --변수 선언 및 커서 선언
    V_ENAME VARCHAR2(50);
    V_JOB VARCHAR2(50);
    CURSOR CUR_JOB IS SELECT ENAME, JOB FROM JOB; --이름과 직업 선택
BEGIN -- 커서 오픈
    OPEN CUR_JOB;
    FETCH CUR_JOB INTO V_ENAME, V_JOB; -- 커서에서 원하는 값 추출
    DBMS_OUTPUT.PUT_LINE(V_ENAME || V_JOB);
   CLOSE CUR_JOB; -- 커서 닫기
END;
cs

 

[예제 2] - 커서(원하는 값 추출) 모두 다 출력

 

결과값 :

한여진경찰
황시목검사
강원철검사
장건경찰
이연재CEO

 

[예제 2 답]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE 
     V_ENAME VARCHAR2(50);
    V_JOB VARCHAR2(50);
    CURSOR CUR_JOB IS SELECT ENAME, JOB FROM JOB;
BEGIN 
    OPEN CUR_JOB;
   LOOP --루프 시작
    FETCH CUR_JOB INTO V_ENAME, V_JOB; -- FETCH 시작, 커서에서 값 가져옴
    IF CUR_JOB%NOTFOUND THEN -- 커서의 상태 확인
           EXIT; --더이상 변수에 할당할 레코드가 없으면 빠져 나감
    END IF;
    DBMS_OUTPUT.PUT_LINE(V_ENAME || V_JOB);
   END LOOP; --LOOP 종료
   CLOSE CUR_JOB; --커서 닫기
END;
cs