아래 테이블이 있다고 가정

T_USER_INF
USER_ID VARCHAR2(10) PK
USER_NM VARCHAR2(10)  

 

1. FETCH 사용

-------------------------------------------------------------------------------------------------
DECLARE

v_userId T_USER_INF.USER_ID%TYPE;      -- 사용자 id
v_userNm T_USER_INF.USER_NM%TYPE;  -- 사용자 이름

-- 테이블 내 선언된 데이터타입 맞춰주어야 함
-- v_id varchar2(10);     
-- v_name varchar2(10);

CURSOR C_TMP1 IS

        SELECT USER_ID,
                  USER_NM
        FROM  T_USER_INF;

BEGIN

        OPEN C_TMP1;   -- 1. 커서 오픈
        DBMS_OUTPUT.PUT_LINE('USER_ID '||' '||' USER_NM');  -- 디어깅용   
        
        LOOP
            FETCH C_TMP1 INTO v_id, v_name; --커서에서 데이터 가져오기
            EXIT WHEN C_TMP1 %NOTFOUND; --커서 속성
            DBMS_OUTPUT.PUT_LINE(v_camp_no||' '||v_cus_no);   -- 디버깅용 출력

        END LOOP;   
        
     CLOSE C_TMP1;    

END;
-------------------------------------------------------------------------------------------------

2. for문 사용

-------------------------------------------------------------------------------------------------
DECLARE

v_userId T_USER_INF.USER_ID%TYPE;      -- 사용자 id
v_userNm T_USER_INF.USER_NM%TYPE;  -- 사용자 이름

-- 테이블 내 선언된 데이터타입 맞춰주어야 함
-- v_id varchar2(10);     
-- v_name varchar2(10);

CURSOR C_TMP1 IS

        SELECT USER_ID,
                  USER_NM
        FROM  T_USER_INF;

BEGIN

        FOR REC IN C_TMP1
        LOOP
            DBMS_OUTPUT.PUT_LINE(REC.USER_ID);               
        END LOOP;

END;
-------------------------------------------------------------------------------------------------

 

차이는 FOR문의 경우 OPEN, CLOSE 작성 안해도 됨

 

 

3. CURSOR WHERE조건을 파라미터로 주고싶을때

* 테이블 내용이 아래와 같다고 가정.

T_USER_INF
USER_ID USER_NM
test01 테스트

-------------------------------------------------------------------------------------------------
DECLARE

v_userNm T_USER_INF.USER_NM%TYPE;  -- 사용자 이름

-- 테이블 내 선언된 데이터타입 맞춰주어야 함
-- v_id varchar2(10);     
-- v_name varchar2(10);

CURSOR C_TMP1(v_userId T_USER_INF.USER_ID%TYPE)

 IS
        SELECT USER_ID,
                  USER_NM
        FROM  T_USER_INF
        WHERE USER_ID = v_userId;

BEGIN

        FOR REC IN C_TMP1('test01')   --()안에 변수 입력
        LOOP 
            DBMS_OUTPUT.PUT_LINE(REC.USER_NM);               
        END LOOP;

END;
-------------------------------------------------------------------------------------------------

3예제는 WHERE USER_ID = 'test01'로 조회된 값 '테스트'가 나옴

오렌지에서 실행할경우 디버깅값 'DBMS_OUTPUT.PUT_LINE'는  Server OutPut에서 확인 가능

 

☆○@!! 프로시저로 돌리는게 아닌, DECLARE 선어해서 돌릴 경우 쿼리 내에 'COMMIT'을 꼭 해줘야 한다.
(프로시저의 경우 CREATE로 선언해주는 DDL이기 때문에 따로 COMMIT필요없음)

'DataBase > Oracle' 카테고리의 다른 글

PLSQL IF/ELSE 사용  (0) 2020.12.02
오라클 컬럼명으로 테이블 찾기  (0) 2020.10.21
오라클 프로시저 실행방법  (0) 2020.10.15
Oracle 실습 환경 구축하기  (0) 2020.02.23

+ Recent posts