INSERT시에 입력받은 달부터 월말까지 똑같은데이터를 자동으로 넣어주는 방법을 알고싶습니다.
구체적으로 제가 하려는 작업을 설명하자면
A라는 테이블에 (SQL, MONTH,....)라는 컬럼이있고 사용자가 파라미터로 (ORACLE, 201708)을 넣어주면
ORACLE, 201708,....
ORACLE, 201709,....
ORACLE, 201710,....
ORACLE, 201711,....
ORACLE, 201712,....
이렇게 동일한 데이터를 년도만 다르게 넣어주는 것입니다.
저는 아래와 같은 방법으로 글로벌 템포러리 테이블을 만들어서 INSERT -SELECT 문 사용해서 해결하려고 했는데
더 좋은 방법이 있지 않을까 해서 문의드립니다.
참고로 저방법으로하니까
세션문제가 발생해서
ORA-14452: 임시 테이블에 인덱스를 작성, 변경 또는 삭제하려고 하는 것이 이미 사용되었습니다
이러한 오류가 발생하는데 세션을 작업시작전에 정리하고 작업을 진행해야할까요?
DECLARE V_DATE VARCHAR2(8) := '20170710'; V_CNT INT(2); V_MONTH VARCHAR2(8) := '20170710'; i INT(1) := 1; BEGIN SELECT COUNT(*) INTO i FROM ALL_TABLES WHERE TABLE_NAME = 'MONTHLIST'; IF i > 0 THEN EXECUTE IMMEDIATE 'DROP TABLE MONTHLIST'; END IF; EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE MONTHLIST (MON VARCHAR2(8))'; SELECT MONTHS_BETWEEN(TO_DATE('201712', 'YYYYMM'), TO_DATE(SUBSTRING(V_DATE,0,6), 'YYYYMM')) INTO V_CNT FROM DUAL; INSERT INTO MONTHLIST (MON) VALUES (SUBSTRING(V_DATE, 0, 6)); FOR i IN 1..V_CNT LOOP SELECT TO_CHAR(ADD_MONTHS(TO_DATE(V_MONTH, 'YYYYMMDD'),1), 'YYYYMMDD') M INTO V_MONTH FROM DUAL; INSERT INTO MONTHLIST (MON) VALUES (SUBSTRING(V_MONTH, 0, 6)); END LOOP; END;
별도 테이블 없이. PL-SQL 사용 안하고.
그냥 간단하게 쿼리로 가능합니다.
http://www.gurubee.net/article/55635
-- INSERT INTO monthlist (mon) SELECT TO_CHAR(ADD_MONTHS(sym, LEVEL-1), 'yyyymm') mon FROM (SELECT TO_DATE('201707', 'yyyymm') sym , TO_DATE('201712', 'yyyymm') eym FROM dual) CONNECT BY LEVEL <= MONTHS_BETWEEN(eym, sym) + 1 ;