ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 ,ename

       FROM emp;
    BEGIN

       FOR emp_rec IN emp_cur -- 커서의 데이터를 저장할 emp_rec 변수 선언됨
       LOOP 

          DBMS_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)
       LOOP

            DBMS_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

    댓글

Designed by Tistory.