CURSOR FOR LOOP에 대해서 질문드립니다. 0 0 3,151

by ameva [PL/SQL] SQL PROCEDURE CURSOR [2016.08.12 17:41:18]


ROWTYPE 레코드 변수에 저장된 레코드들을 개별적으로 제어가능한지 궁금합니다.

(레코드 변수에 저장된 마지막 레코드를 테이블에 INSERT할때 어떤 조건을 주고 싶은데 그게 가능한지 궁금합니다.)

 

참고로 제가 작성한 프로시저 소스는 아래와 같으며

코드로 작성해야 하는 부분은 빨간색으로 표시하였습니다

도움좀 부탁드립니다 ^^

 

 

CREATE OR REPLACE PROCEDURE SP_SELECT
as
   
    C_NAME CHAR := NULL;
    C_ID TINYINT := 0;
    C_TOTAL INT := 0;
    C_TEMP T1%rowtype;
   
    CURSOR C1 IS
        SELECT NAME, ID, YYDDMM, ORD, ETC1, ETC2, ETC3, ETC4 FROM T1;
        
BEGIN

    FOR C_TEMP IN C1 LOOP
       
        CASE
            WHEN C_TEMP.NAME = 'A' THEN
                INSERT INTO TA VALUES (:C_TEMP.NAME, :C_TEMP.ID, :C_TEMP.YYDDMM, :C_TEMP.ORD, :C_TEMP.ETC1, :C_TEMP.ETC2, :C_TEMP.ETC3, :C_TEMP.ETC4);
                C_TOTAL := C_TOTAL + C_TEMP.ID;

// 만약 A가 마지막 레코드일 경우(더이상 읽어올 레코드가 없음) 지금까지 합산된 값을 TC테이블에 입력한다.
           
            WHEN C_TEMP.NAME = 'B' THEN
                INSERT INTO TB VALUES (:C_TEMP.NAME, :C_TEMP.ID, :C_TEMP.YYDDMM, :C_TEMP.ORD, :C_TEMP.ETC1, :C_TEMP.ETC2, :C_TEMP.ETC3, :C_TEMP.ETC4);
                C_TOTAL := C_TOTAL + C_TEMP.ID;

// 만약 B가 마지막 레코드일 경우(더이상 읽어올 레코드가 없음) 지금까지 합산된 값을 TC테이블에 입력한다.
           
            WHEN C_TEMP.NAME = 'C' THEN
                INSERT INTO TC VALUES ('SUM', :C_TOTAL, :C_TEMP.YYDDMM, :C_TEMP.ORD, :C_TEMP.ETC1, :C_TEMP.ETC2, :C_TEMP.ETC3, :C_TEMP.ETC4);
                C_TOTAL := 0;

            ELSE
                INSERT INTO ETC VALUES ('0',0);
        END CASE; 
    END LOOP;
  END;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입