암시적 커서
암시적 커서는 SQL문장이 처리되는 곳에 대한 익명의 주소
실행되는 모든 SQL문은 암시적인 커서가 생성되고, 그대로 이용 할 수 있다.
SQL%ROWCOUNT, 해당 SQL문에 영향을 받는 행의 수
SQL%FOUND, 해당 SQL문에 영향을 받는 행의 수가 한 개 이상일 때 TRUE
SQL%NOTFOUNT, 해당 SQL문에 영향을 받는 행의 수가 없을 때 TRUE
SQL%ISOPEN, 항상 FALSE, 암시적 커서가 열려있는지 여부
커서는 사용하고 꼭 닫아줘야 한다.
JAVA의 몇몇 클래스들 처럼...
결론으로 커서는 쿼리문을 주소로 담고있는것.
명시적 커서
명시적 커서는 직접 커서를 만들어 사용하는 것.
커서에는 한개 이상의 데이터가 담기게 되고 데이터를 OPEN, PATCH, CLOSE 등을 사용하여 다룬다.
CURSOR 커서이름 IS 실행 할 문장
CURSOR test_cursor IS SELECT * FROM dept
와 같은 형식으로 사용
SET SERVEROUTPUT ON; -- 1) 암시적(묵시적) 커서 -- SQL%ROWCOUNT : 쿼리를 만족하는 갯수 추출 -- SQL%FOUND : 쿼리를 만족하는 갯수가 있는가? T/F -- SQL%NOTFOUND : 쿼리를 만족하는 갯수가 없는가? T/F DECLARE v_emp employees%ROWTYPE; BEGIN SELECT salary INTO v_emp.salary FROM employees WHERE emp_no = 115; IF SQL%FOUND THEN -- FOUND - 해당 문장 값이 존재하는가 DBMS_OUTPUT.PUT_LINE('검색한 값이 있습니다.'); DBMS_OUTPUT.PUT_LINE('115번 사원의 급여 : '||v_emp.salary); DBMS_OUTPUT.PUT_LINE('115번 사원의 수 : '||SQL%ROWCOUNT); ELSE DBMS_OUTPUT.PUT_LINE('검색한 값이 없습니다.'); END IF; END; / SELECT * FROM dept; -- 2) 명시적 커서 DECLARE CURSOR cur IS SELECT * FROM dept; v_dept dept%ROWTYPE; BEGIN OPEN cur; LOOP FETCH cur INTO v_dept.deptno, v_dept.deptname, v_dept.loc; DBMS_OUTPUT.PUT_LINE('부서번호 : '||v_dept.deptno); DBMS_OUTPUT.PUT_LINE('부서명 : '||v_dept.deptname); DBMS_OUTPUT.PUT_LINE('위치 : '||v_dept.loc); DBMS_OUTPUT.PUT_LINE('Count : '||cur%ROWCOUNT); EXIT WHEN cur%ROWCOUNT >= 5; END LOOP; CLOSE cur; END; / -- FOR IN LOOP -- CURSOR의 OPEN,PATCH,CLOSE 가 필요 없다. DECLARE CURSOR cur IS SELECT * FROM dept; v_dept dept%ROWTYPE; BEGIN FOR v_dept IN cur LOOP DBMS_OUTPUT.PUT_LINE('부서번호 : '||v_dept.deptno); DBMS_OUTPUT.PUT_LINE('부서명 : '||v_dept.deptname); DBMS_OUTPUT.PUT_LINE('위치 : '||v_dept.loc); END LOOP; END; /
'Oracle DB 11g > 03.PL SQL' 카테고리의 다른 글
[DB]03-09.Oracle DB PLSQL 트리거, TRIGGER, :NEW (0) | 2018.10.11 |
---|---|
[DB]03-07.Oracle DB PLSQL LOOP, WHILE, FORLOOP 반복문 (0) | 2018.10.11 |
[DB]03-06.Oracle DB PLSQL IF문, 만들어 둔 프로시저 소스 확인 (0) | 2018.10.10 |
[DB]03-05.Oracle DB PLSQL Procedure(Insert, Update, Delete 예제) (0) | 2018.10.10 |
[DB]03-04.Oracle DB PLSQL Function (0) | 2018.10.10 |