투케이2K

87. (DB/데이터베이스) [ORACLE] cursor (커서) 정보 저장 메모리 공간 설명 본문

DataBase

87. (DB/데이터베이스) [ORACLE] cursor (커서) 정보 저장 메모리 공간 설명

투케이2K 2022. 12. 10. 09:54

[학습 구분]

과목 : Database / 데이터베이스

 

[설 명]

1. cursor 는 오라클 PL/SQL 내부에서 SQL 문장을 처리하는 정보를 저장한 메모리 공간입니다

2. open 은 저장된 커서의 데이터를 가져올 때 사용합니다

3. fetch 는 저장된 데이터를 조작하고 읽어올 때 사용합니다

4. [Oracle] 코드 예시 :

DECLARE
         
    /*
    [cursor 사용해 SQL 메모리 저장 및 fetch 행 출력 실시] 
    1. Cursor (커서) : PL/SQL 내부에서 SQL 문장을 처리하는 정보를 저장한 메모리 공간입니다 
    2. Fetch (페치) : 행을 가져읍니다
    3. Open : 저장된 커서의 데이터를 가져올 때 사용합니다
    */
    
    -- [명시적 커서 선언 : cursor [이름] is {sql 문법}]   
    cursor create_cursor is (
        select t_dept_name, t_dept_place
            from test_dept
        where t_dept_name like '%백제%'    
    );
    -- [커서 실행 결과를 fetch 읽을 때 사용 할 변수 선언]
    v_name test_dept.t_dept_name%type;
    v_place test_dept.t_dept_place%type;


    -- [커서 행 카운트를 위한 변수 선언]
    M_CNT NUMBER;
        
BEGIN

    -- [커서 open 열기 실시]
    open create_cursor;
    
    
    -- [커서에 저장된 결과 행이 여러 개인 경우 반복문을 돌려서 출력 실시]
    M_CNT := 1; -- 결과 행 카운트 변수 초기값 지정
    loop
        -- [fetch 를 사용해서 변수 지정 및 출력 실시]
        fetch create_cursor into v_name, v_place;
        
        -- [커서에서 더이상 읽을 행이 없는 경우 종료 실시]
        exit when create_cursor%notfound;
        
        -- [읽은 행 결과 출력 실시]
        DBMS_OUTPUT.PUT_LINE('============================='); 
        DBMS_OUTPUT.PUT_LINE('카운트 : ' || M_CNT);
        DBMS_OUTPUT.PUT_LINE('v_name : ' || v_name);
        DBMS_OUTPUT.PUT_LINE('v_place : ' || v_place); 
        DBMS_OUTPUT.PUT_LINE('=============================');
        
        -- [결과행 읽은 카운트 증가 실시]
        M_CNT := M_CNT + 1;
    end loop; 
    
    
    -- [커서 오픈 종료]
    close create_cursor;
    
END;
/
 
반응형
Comments