procedure 내에서 select결과 여러번 사용할 수 있나요 ? 0 3 932

by kimmmmmmm [PL/SQL] [2016.12.11 13:05:26]


아래와 같이 Procedure내에서 처럼 select한 결과를 2개의 테이블에 insert를 하는데,

하나의 테이블은 'COL'컬럼의 중복제거된 결과를 저장하고, 하나의 테이블은 모두 저장하게 하고 싶습니다.

 

어떤 방법이 있을 수 있을까요 ?


BEGIN
    FOR TMP IN (WITH TMP_TABLE AS (
                    SELECT 'A' AS COL  FROM DUAL
                     UNION ALL
                    SELECT 'A' AS COL  FROM  DUAL
                     UNION ALL
                    SELECT 'A' AS COL  FROM  DUAL
                     UNION ALL
                    SELECT 'B' AS COL  FROM  DUAL
                     UNION ALL
                    SELECT 'C' AS COL  FROM  DUAL
                )SELECT  *
                   FROM  TMP_TABLE)
    LOOP
        DBMS_OUTPUT.PUT_LINE( '-----' );
        
        INSERT INTO FST_TABLE(FST_COLUMN
                      )VALUES(TMP.COL       -- select결과에 중복제거를 하여 저장해야 합니다.
                      );
                      
        INSERT INTO SND_TABLE(FST_COLUN
                      )VALUES(TMP.COL        -- select결과를 바로 저장합니다.
                      );
    END LOOP;
END;

by 우리집아찌 [2016.12.12 07:56:39]
tmp table 만들때 row_number 사용해서 구분값 만드시고 중복재거 테이블에서 if문 처리하시는게 조을듯합니다
모바일이라 자세한건 힘드네요 ㅜㅜ

by 마농 [2016.12.12 11:27:25]
BEGIN
    FOR tmp IN (WITH tmp_table AS
                (
                SELECT 'A' AS col FROM dual
                UNION ALL SELECT 'A' FROM dual
                UNION ALL SELECT 'A' FROM dual
                UNION ALL SELECT 'B' FROM dual
                UNION ALL SELECT 'C' FROM dual
                )
                SELECT col
                     , ROW_NUMBER() OVER(PARTITION BY col ORDER BY col) rn -- 요거
                  FROM tmp_table
                )
    LOOP
        DBMS_OUTPUT.PUT_LINE( '-----' );
        IF tmp.rn = 1 THEN
            INSERT INTO fst_table(fst_column) VALUES(tmp.col);    -- 중복제거
        END IF;
        INSERT INTO snd_table(fst_colun) VALUES(tmp.col);         -- 바로저장
    END LOOP;
END;
/

 


by 마농 [2016.12.12 14:01:49]
-- 한방 쿼리 --
INSERT ALL
WHEN rn = 1 THEN INTO fst_table(fst_column) VALUES(col)
WHEN  1 = 1 THEN INTO snd_table(fst_colun ) VALUES(col)
WITH tmp_table AS
(
SELECT 'A' AS col FROM dual
UNION ALL SELECT 'A' FROM dual
UNION ALL SELECT 'A' FROM dual
UNION ALL SELECT 'B' FROM dual
UNION ALL SELECT 'C' FROM dual
)
SELECT col
     , ROW_NUMBER() OVER(PARTITION BY col ORDER BY col) rn
  FROM tmp_table
;

 

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