Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- SQL
- Spring Cloud Feign
- MST
- PL/SQL
- 자료구조
- db
- retry
- Jenkins
- 자바
- feign
- DP
- 코딩
- 백준
- aws
- golang
- 알고리즘
- 오라클
- Kafka
- Spring Cloud
- Intellj
- Spring
- 데이터베이스
- JPA
- 쿼리
- 운영체제
- 페이징
- MVC
- 디자인 패턴
- 클라우드
- Spring Boot
Archives
- Today
- Total
justgo_developer
커서의 의미와 사용예 본문
728x90
반응형
커서(cursor)
: 쿼리문에 의해서 반환되는 결과값들 저장하는 메모리 공간
Fetch
: 커서에서 원하는 결과값을 추출하는것
- 커서의 종류
. 명시적(Explicit) 커서 : 사용자가 선언해서 생성 후 사용하는 SQL 커서. 주로 여러개의 행을 처리하고자 할 경우 사용.
. 묵시적(implicit) 커서 : 오라클에서 자동으로 선언해주는 SQL 커서. 사용자는 생성 유무를 알수없음.
- 커서의 속성
1. %Found - 할당할 레코드가 있는 경우 true 반환
2. %isOpen - 커서가 오픈 상태일 경우 true 반환
3. %NotFound - 할당할 레코드가 없는 경우 true 반환
4. %RowCount - 카운터 역할을 한다. 오픈 됬을 경우 0, 패치발생할때마다 1씩 증가
- 커서의 처리단계(명시적 커서)
1. 명시적 커서 선언 -> Cursor 커서이름
2. 명시적 커서 오픈 -> Open 커서이름
3. 커서에서 데이터 추출 -> Fetch 커서이름
4. 커서 종료 -> Close 커서이름
ex)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | declare emp_id number(4); emp_name varchar2(10); emp_salary number(10); Cursor cu1 is select employee_id, last_name, salary from employees where department_id = 20; begin open cu1; dbms_output.put_line('사번 이름 급여'); loop fetch cu1 into emp_id, emp_name, emp_salary; exit when cu1%notFound; dbms_output.put_line(emp_id || ' ' || emp_name || ' ' ||emp_salary); end loop; close cu1; end; | cs |
<커서와 반복문(for문)>
- 사용 형식
For 레코드 이름 in 커서이름 loop
명시적 커서의 open, fetch가 자동으로 수행
실행 문장들
end loop; -> 루프문을 빠져 나갈때 자동적으로 커서가 종료됨
1 2 3 4 5 6 7 8 9 | declare cursor emp_cur is select employee_id, last_name from employees; begin for emp_rec in emp_cur loop dbms_output.put_line(emp_rec.employee_id || ' '|| emp_rec.last_name); end loop; end; | cs |
1 2 3 4 5 6 7 8 9 10 11 12 | declare emp employees%rowtype; cursor cur1 is select employee_id, last_name, salary from employees begin for emp in cur1 loop exit when cur1%notFound; dbms_output.put_line(emp.employee_id || ' ' || emp.last_name ||' ' || emp.salary); end loop; end; | cs |
1 2 3 4 5 6 7 8 9 | declare begin for emp in(select employee_id, last_name, salary from employees) loop dbms_output.put_line(emp.employee_id || ' ' || emp.last_name ||' ' || emp.salary); end loop; end; | cs |
묵시적 커서 사용 예 : 속성 사용시 SQL%notFound, SQL%rowcount, SQL%found, SQL%isopen
1 2 3 4 5 6 7 8 9 10 11 12 | declare cnt1 number; cnt2 number; begin select count(*) into cnt1 from employees where department_id = 120; cnt2 := sql%rowcount; dbms_output.put_line('cnt1의 값 : ' || cnt1); dbms_output.put_line('cnt2의 값 : ' || cnt2); end; | cs |
728x90
반응형
'IT > Oracle' 카테고리의 다른 글
반복문(basic loop, while, for loop, continue) (0) | 2018.12.08 |
---|---|
조건문(if문, case문) (0) | 2018.12.03 |
콜렉션, 바인드 변수 (0) | 2018.12.02 |
rowType 변수 및 복합변수 활용 (0) | 2018.12.01 |
PL/SQL (0) | 2018.11.30 |