투케이2K

150. (Oracle/오라클) cursor 커서 사용해 PL/SQL 메모리 저장 및 fetch 행 출력 실시 본문

OracleDB

150. (Oracle/오라클) cursor 커서 사용해 PL/SQL 메모리 저장 및 fetch 행 출력 실시

투케이2K 2021. 9. 3. 09:08

[개발 환경 설정]

개발 툴 : Toad

개발 언어 : 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;
/

[결과 출력]


[요약 설명]

/*

[cursor 사용해 SQL 메모리 저장 및 fetch 행 출력 실시]

1. Cursor (커서) : PL/SQL 내부에서 SQL 문장을 처리하는 정보를 저장한 메모리 공간입니다

2. Fetch (페치) : 행을 가져읍니다

3. Open : 저장된 커서의 데이터를 가져올 때 사용합니다

*/


 

반응형
Comments