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; |
반응형