일괄저장처리에 대한 문의입니다 0 3 920

by 김코옹 [2015.06.02 17:34:21]


테이블에 데이타를 반복적으로 저장시켜야 하는데요..

저장되야하는 데이타는 아래 표와같은 형태로 저장되어야 합니다.

A 201401 1 작업1 관리자 SYSDATE
A 201401 2 작업2 관리자 SYSDATE
A 201401 3 작업3 관리자 SYSDATE
A 201401 4 작업4 관리자 SYSDATE
A 201401 5 작업5 관리자 SYSDATE

 

A라는 업무가 2014년1월에 작업1~ 작업5까지 수행했다는 이력을 관리하는 테이블인데

이력테이블이 나중에 추가되다보니 과거데이타에 대한 이력을 insert하는 작업을 해야합니다

한 업무가 수행하는 작업은 5개로 고정이고 년월만 변경되어 작업 별로 저장되면 됩니다.

저런식으로 구성된 데이타를 일괄로 insert할 때 좋은 방법이 어떤게 있는지 의견부탁드립니다.

by 창조의날개 [2015.06.02 17:54:44]
SELECT A1, TO_CHAR(ADD_MONTHS(TO_DATE(A2,'YYYYMM'),RN-1),'YYYYMM') A2, A3, A4, A5, A6
FROM (
      SELECT 'A' A1,	'201401' A2,	1 A3,	'작업1' A4,	'관리자' A5,	SYSDATE A6 FROM DUAL UNION ALL
      SELECT 'A',	'201401',	2,  '작업2', '관리자',	SYSDATE FROM DUAL UNION ALL
      SELECT 'A',	'201401',	3,	'작업3',	'관리자',	SYSDATE FROM DUAL UNION ALL
      SELECT 'A',	'201401',	4,	'작업4',	'관리자',	SYSDATE FROM DUAL UNION ALL
      SELECT 'A',	'201401',	5,	'작업5',	'관리자',	SYSDATE FROM DUAL
   )  T1
   , (SELECT ROWNUM RN FROM DUAL CONNECT BY LEVEL <= 50) T2
WHERE ADD_MONTHS(TO_DATE(A2,'YYYYMM'),RN-1) <= SYSDATE
ORDER BY 1,2,3,4
;

 


by 마농 [2015.06.02 18:12:30]

3개 기준 집합(테이블)을 만들어 크로스 조인 하시면 됩니다.
 - 1. 업무 : 업무의 갯수만큼
 - 2. 연월 : 필요한 연월만큼
 - 3. 작업 : 필요한 작업만큼

WITH 업무 AS
(
SELECT 'A' job FROM dual
UNION ALL SELECT 'B' FROM dual
)
, 연월 AS
(
SELECT TO_CHAR(ADD_MONTHS(sym, LEVEL - 1), 'yyyymm') ym
  FROM (SELECT TO_DATE('201401', 'yyyymm') sym, TO_DATE('201505', 'yyyymm') eym FROM dual)
 CONNECT BY LEVEL <= MONTHS_BETWEEN(eym, sym)
)
, 작업 AS
(
SELECT LEVEL work_no
     , '작업' || LEVEL work_nm
  FROM dual
 CONNECT BY LEVEL <= 5
)
SELECT job
     , ym
     , work_no
     , work_nm
     , '관리자' up_id
     , sysdate  up_dt
  FROM 업무
     , 연월
     , 작업
 ORDER BY job, ym, work_no
;

 


by 김코옹 [2015.06.02 19:28:06]

답변달아주신 창조의날개님, 마농님 감사합니다.

 

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