2014년 10월 9일 목요일

커서(Cursor)란? [ORACLE/SQL/HINT/오라클/교육/강의/강좌/SQL교육/오라클 PLSQL/강의/강좌/오라클교육/ORACLE초보교육/오라클실무강좌]

커서는 특정한 SQL영역을 가리키는 핸들 정도로 생각하시면 되구요... 
Oracle Server에 의해 실행되는 모든 SQL문은 연관된 각각의  커서를 소유 합니다. 
그래서 커서는 암시적 커서(모든 DML과 PL/SQL SELECT문에 대해 선언)와 명시적커서 
(프로그래머에 의해 선언되며 이름이 있는 커서)로 구분 할 수 있습니다. 

명시적 커서를 다루기 위해서는 4가지 정도의 Step이 필요 합니다. 

Cursor Operation Step 

1. DECLARE  //커서를 선언 
2. OPEN        //뚜껑을 열어야 사용 하겠죠... 
3. FETCH      //하나씩 꺼냅니다. 
4. CLOSE      //다 쓰고 나면 뚜껑을 닫습니다. 

CURSOR  c_emp_salary  IS 
      SELECT last_name, salary  FROM s_emp 
      WHERE dept_id = p_dept_id; 
 …… 
BEGIN 
      OPEN c_emp_salary  ; 
      LOOP 
                FETCH  c_emp_salary  INTO v_last_name, v_sal ; 
                IF c_emp_salary  %NOTFOUND  THEN  --나가기 위한 조건 
                            EXIT; 
                END IF; 
                ……. 
      END LOOP; 
      CLOSE c_emp_sal; 
…… 

그럼 하나씩 보도록 하죠~~ 

1. 선언하기 

문법 : DECLARE  CURSOR 커서이름  IS  select_statement; 

사용되기 전에 선언하며 선언된 커서는 이름이 할당되고  SELECT문과 연결 됩니다. 
SELECT문의 INTO절은 생략합니다. 
Oracle PL/SQL 블록의 선언부에 위치하며 커서 내의 SELECT문에 Default 값을 사용할 수 도 있습니다. 

2, 커서 열기 

OPEN 커서이름 ; 

3. 커서로 부터 데이터 패치 
추출되는 컬럼의 수와  변수의 수 또는 데이터 타입은 동일 해야 합니다. 

 FETCH 커서이름 INTO 변수1, 변수2; 


4. 커서 닫기 

항상 닫아 주어야 합니다. 

CLOSE 커서이름; 

---- 
예) 
---- 
SQL> ed p3 
CREATE OR REPLACE PROCEDURE p_emp_info 
          (p_dept_id    s_emp.dept_id%TYPE) 
IS  
          CURSOR  c_emp_sal  IS 
                    SELECT last_name, salary 
                    FROM s_emp 
                    WHERE dept_id = p_dept_id; 
          v_sal                s_emp.salary%TYPE; 
          v_last_name    s_emp.last_name%TYPE; 
BEGIN 
          OPEN c_emp_sal; 
          LOOP 
                    FETCH  c_emp_sal  INTO  v_last_name, v_sal ; 
                    IF  c_emp_sal%NOTFOUND  THEN 
                              EXIT; 
                    END IF; 
                    DBMS_OUTPUT.PUT_LINE(v_last_name || '  ' || v_sal); 
          END LOOP; 
          CLOSE c_emp_sal; 
END; 

SQL> @p3 
SQL> EXEC p_emp_info(31); 


 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-272122
 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취…오라클자바…12-111532
53 [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… 오라클자바…03-151305
52 [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍 오라클자바…01-311444
51 [평일,기업100%환급]SQL기초에서 Schema Object까지 오라클자바…01-311448
50 [기업100%환급]Spring ,MyBatis,Hibernate실무과정(스프링개발자… 오라클자바…01-311128
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 오라클자바…01-191446
48 [평일주간,평일야간,주말]안드로이드개발자과정 오라클자바…01-111275
47 [평일야간,주말주간,주말야간]JAVA,Network&JSP&Spring,MyBatis,… 오라클자바…01-031775
46 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-272122
45 [기업100%환급,평일주간]자바기초에서 JDBC, Servlet/JSP까지 오라클자바…12-191536
44 [평일야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,Jav… 오라클자바…12-141513
43 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… 오라클자바…12-111532
42 [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 오라클자바…12-091217
41 [평일야간, 주말]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011448
40 [기업100%환급]안드로이드개발자과정(Android전액환급교육) 오라클자바…12-011587
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011100

댓글 없음:

댓글 쓰기