아래 테이블이 있다고 가정
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 |