티스토리 뷰

Oracle

cursor 를 사용한 for loop

deerfrd 2019. 6. 27. 13:34

일반적으로 여러개의 데이터를 select 해와서 한번에 insert 하는 쿼리는 하단과 같다.

 

< 20살 이상의 학생들 데이터를 RESULT_TB에 일괄로 insert>

INSERT INTO RESULT_TB
 ( SEQ, NAME, AGE, GENDER )
SELECT 
  RESULT_SEQ.NEXTVAL, NAME, AGE, GENDER 
FROM STUDENT_TB
WHERE AGE >= 20;

 

그런데, RESULT_TB2 라는 테이블이 새로 생기고, 이제는 20살 이상의 학생들을 RESULT_TB, RESULT_TB2 모두 한번에 넣어줘야 하는 상황이 생겼다.

근데, RESULT_TB 의 시퀀스를 가지고 그대로 RESULT_TB2 테이블의 RESULT_SEQ 라는 컬럼에 바로 넣어줘야 하는 상황이다.

나는 프로시저로 작성해 보고자 한다.

create or replace PROCEDURE TEST_PROC AS

V_SEQ NUMBER(10,0);

BEGIN
DECLARE
/*커서선언*/
CURSOR CS_TEST IS
SELECT 
NAME,
AGE,
GENDER
FROM
STUDENT_TB
WHERE 
AGE >= 20
;

BEGIN
/*커서 for loop 시작*/
FOR CS_T IN CS_TEST LOOP
SELECT RESULT_SEQ.NEXTVAL INTO V_SEQ FROM DUAL; /* for문 돌 동안, seq 증가시킨값 변수에 대입 */

/* 첫번째 INSERT 문 */
INSERT INTO RESULT_TB
( SEQ, NAME, AGE, GENDER )
VALUES
( V_SEQ, CS_T.NAME, CS_T.AGE, CS_T.GENDER);

/* 두번째 INSERT 문 */
INSERT INTO RESULT_TB2
( RESULT_SEQ, NAME, AGE, GENDER )
VALUES
( V_SEQ, CS_T.NAME, CS_T.AGE, CS_T.GENDER);

END LOOP;
END;

COMMIT;
END TEST_PROC;
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함