아래와 같이 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;
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; /
-- 한방 쿼리 -- 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 ;