공부는 끊임없이 !!

jwlee1728.egloos.com

포토로그



copy_t 활용 DB-SOLUTION

대용량 데이터 베이스 솔루션 2권에 있는 예제를 따라해봤다. 

우선 테이블과 데이터를 하나 넣고

create table loop_carti(
seq number,
occur_date varchar2(8),
start_date varchar2(8),
end_date varchar2(8),
prev_amt number );

insert into loop_carti (seq, occur_date, start_date, end_date, prev_amt) values ( 1, '19970501', '19970520', '19970925', 5000000)



select substr(st_date, 1, 6),  round( prev_amt * (ed_date - st_date +1)/tot_days, 0)  , ed_date - st_date + 1, prev_amt, st_date, ed_date, tot_days
from 
(select decode(substr(a.start_date, 5,2), NO2,  a.start_date,  to_char( to_date(substr(a.start_date,1,4)||NO2, 'YYYYMM' ), 'YYYYMMDD')  ) st_date,
        decode(substr(a.end_date, 5, 2), NO2, a.end_date,  to_char(last_day( to_date(substr(a.end_date, 1,4) || NO2, 'YYYYMM') ), 'YYYYMMDD') ) ed_date,
        a.prev_amt,
        to_date(a.end_date) - to_date(a.start_date) + 1 tot_days,
        a.start_date, a.end_date, NO2
from loop_carti a, copy_t b
where b.no2 between substr(a.start_date, 5,2) and substr(a.end_date, 5,2)
and a.seq=1)


예제는 선수금에 대한 예제이다. 선수금에 대한 금액을 각월별로 쪼개 매출 테이블에 넣는 예인데

선수금은 여러일자에 걸쳐있기대문에 해당월의 일수별로 선수금을 나누어 해당월의 매출로 잡는것이다.

이 과정에서 copy_t를 사용하여 월별 로우를 계산하여 select를 하는 거까지( insert는 제외) 해본 예제이다.


책과 비교했을때 크게 다른점은 없었다.

덧글

댓글 입력 영역