ORACLE 의 FOR 순환, 커서, 시간 값 함수, 변환 함수 문제

제목: 입력 변수 가 cur 라면date  varchar2    다음 변수 통계:        오늘 생산량  cur_date        어제 생산량  to_char(to_date(cur_date,'yyyymmdd')-1,'yyyymmdd')        이번 달 생산량  substr(cur_date,1,6)        금년 생산량  substr(cur_date,1,4)        작년 동기 생산량 tochar(add_months(to_date(cur_date,'yyyymmdd'),-12),'yyyymmdd')    1) 기본 SQL 로 구현
    FOR 순환 커서 로 구현    평가 의 지식: FOR 순환, 커서, 시간 값 함수, 변환 함수, DECODE / CASE 용법
이 문 제 는 여러분 의 고수 가 필요 합 니 다.
참고 답안 은 다음 과 같다.
 
 
select *
    from factory
    select to_char(to_date('20080602','yyyymmdd') -1,'yyyymmdd')
    from dual  
    select to_char(add_months(to_date(f.cur_date,'yyyymmdd'),-12),'yyyymmdd')
    from dual
    create table temp
    as  
    select cur_date,(select 
                     sum(case when cur_date=f.cur_date then cur_perout
                     else 0
                     end)
                     from factory) a,
                     (select 
                     sum(case when cur_date=to_char(to_date(f.cur_date,'yyyymmdd') -1,'yyyymmdd')
                     then cur_perout else 0
                     end)
                     from factory) b ,
                     (select 
                     sum(case when substr(cur_date,1,6)=substr(f.cur_date,1,6) then cur_perout
                     else 0
                     end)
                     from factory) c,
                     (select
                      sum(case when substr(cur_date,1,4)=substr(f.cur_date,1,4) then cur_perout
                      else 0
                     end)
                     from factory) d,
                     (select
                     sum(case when cur_date=to_char(add_months(to_date(f.cur_date,'yyyymmdd'),-12),'yyyymmdd')
                        then cur_perout else 0
                     end)
                     from factory) e
                     
    from factory f
    where rownum <1
   -- where cur_date='20080602';
begin 
  for temstr in (select * from factory) loop
  insert into temp
  select temstr.cur_date,--  (    /  )
         sum(case when cur_date=temstr.cur_date then cur_perout
             else 0
             end),
         sum(case when cur_date=to_char(to_date(temstr.cur_date,'yyyymmdd') -1,'yyyymmdd') 
         then cur_perout
             else 0
             end),
         sum(case when substr(cur_date,1,6)=substr(temstr.cur_date,1,6) then cur_perout
             else 0
             end),
         sum(case when substr(cur_date,1,4)=substr(temstr.cur_date,1,4) then cur_perout
             else 0
             end),
         sum(case when cur_date=to_char(add_months(to_date(temstr.cur_date,'yyyymmdd'),-12),'yyyymmdd') then cur_perout
             else 0
             end)
         from factory; 
  end loop;
end;
  select * from temp
    

 
 

좋은 웹페이지 즐겨찾기