-
day12 - 오라클 (PL/SQL, 커서, 명시적 커서, 묵시적 커서, 프로시저KIC/DB 오라클 2021. 7. 14. 00:33반응형
[SQL 커서]
- SQL 커서 : 오라클 서버에서 SQL 문을 실행할 때마다 처리(Parse, Execution)를 위한 메모리공간
-> SQL문을 실행했을 때 해당 SQL문 처리 정보를 저장
-> SELECT문의 결과 행 별로 특정 작업 수행
- select into 방식
-> 조회되는 행이 하나 일 때
-> 커서는 조회되는 행의 수와 상관없이 사용
- 즉 사용자가 요청하는 데이터를 데이터베이스 버퍼 캐쉬에서 커서로 복사해온 후 커서에서 원하는 데이터를 추출하여(Fetch) 후속 작업을 하게 된다는 뜻.
- 이 메모리 공간을 Private SQL Area한다
- SQL 커서는 크게 묵시적 커서(Implicit Cursor)와 명시적 커서(Explicit Cursor)로 나눌 수 있다.
[명시적 커서]
-> 직접 커서를 선언하고 사용
[예시]
•명시적 커서 속성(Cursor Attribute)
- 커서이름%ROWCOUNT
- 커서이름%FOUND
- 커서이름%NOTFOUND
- 커서이름%ISOPEN[명시적 커서 loop 예시]
[명시적 커서 for문]
-> 더 가독성이 좋고 간단하다.
-> 자동으로 알아서 open close 해준다.
[명시적 커서 for문 구조]
[명시적 커서 for문 예시1]
DECLARE
CURSOR emp_cur IS -- 커서 선언됩니다
SELECT empno ,enameFROM emp;
BEGINFOR emp_rec IN emp_cur -- 커서의 데이터를 저장할 emp_rec 변수 선언됨
LOOPDBMS_OUTPUT.PUT_LINE(emp_rec.empno||' '||emp_rec.ename);
END LOOP;
END;[명시적 커서 for문 예시2]
-> 서브쿼리를 사용하는 예시
-> 이 방법으로 DECLARE 부분에 커서를 선언할 필요가 없어짐
-> 대신 커서에 들어가는 서브쿼리 부분을 IN 뒷부분에 바로 사용
DECLARE
BEGIN
FOR emp_rec IN (SELECT empno, ename, sal FROM emp)
LOOPDBMS_OUTPUT.PUT_LINE(emp_rec.empno||' '||emp_rec.ename||' '||emp_rec.sal);
END LOOP;
END ;[명시적 커서 for문 예시3]
-> 커서에서 alias (aaa) 를 지정했을 경우 실제 커서가 실행될때 알리아스를 활용한다.
[묵시적 커서]
- SQL문을 사용했을 때 자동으로 선언되는 커서
- OPEN, FETCH, CLOSE 지정없음
- 묵시적 커서는 오라클에서 자동적으로 선언해주는 SQL 커서로서, 사용자는 생성 유무를 알 수 없음
- 묵시적 커서에 저장되는 데이터는 1 행만 가능.
•묵시적 커서 속성(Cursor Attribute)
- SQL%ROWCOUNT
- SQL%FOUND
- SQL%NOTFOUND
- SQL%ISOPEN--ex
DECLARE v_deptno number :=&dno;
begin
delete emp where deptno = v_deptno;
dbms_output.put_line('삭제된 건수는 '||sql%rowcount||' 입니다');
rollback;
end;-> 일반적으로는 커서와 for문을 활용하는 방식이 가장 많이 쓰인다.
[PL/SQL sub program]
-> 저장 서브프로그램: 이름을 지정하여 저장해두는 PL/SQL 프로그램을 뜻한다.
-> 예전에는 트리거를 자주 썼었으나 현재에는 그다지 많이 쓰이지는 않음.
-> 정보처리기사에는 개념이 나오니 개념은 공부할 것
[프로시저]
-> 파라미터를 사용하는 프로시저
-> [] 안은 생략이 가능
-> 4,5,6 번은 기존과 동일한 개념
300x250'KIC > DB 오라클' 카테고리의 다른 글
day11_3 - 오라클 (PL/SQL, RECORD Type 변수, 컬렉션, 바인드 변수, 조건문, 반복문) (0) 2021.07.13 day11_2 - 오라클 (PL/SQL 기본구조, 익명 블록, 작성 규칙, 주의 사항, 연산자, 변수) (0) 2021.07.13 day11_1 - 오라클 (user, schema, Role) (0) 2021.07.13 day10 - 오라클 (CREATE, ALTER, RENAME, MODIFY, 제약조건, 외래키, 인덱스, 뷰, 시퀸스) (0) 2021.07.13 day09 - 오라클 (sql 명령어, insert, delete, truncate, drop 차이, merge, commit, DML) (0) 2021.07.10