달력

02

« 2012/02 »

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  •  
  •  
  •  


-- ================================================================================================================================
-- 작 성 자 : 박종현
-- 작 성 일 : 2009.04.27
-- 설    명 :
-- 샘플실행 :
-- 변경이력 : EXEC [dbo].[USP_CalculateMarkedWordCnt] '0508001','2009','01','01','GT','01','06032647'
-- ================================================================================================================================
ALTER PROCEDURE [dbo].[USP_CalculateMarkedWordCnt]

 @ACADEMY_SEQ varchar(2) -- 학원코드
 , @CODE_YEA varchar(4) -- 년도
 , @TRM_CODE varchar(2) -- 학기코드
 , @WEK_CODE varchar(2) -- 주차코드
 , @PROGRAM_CODE varchar(2) -- 주차코드
 , @GRADE_CODE VARCHAR(2) -- 학년코드
 , @USER_SEQ VARCHAR(8) -- 원생코드

AS

 CREATE table dbo.#LinkedWord -- 2. 임시 테이블 생성
 (
  ols_word varchar(10) not null
  ,ols_program varchar(10) null
  , ols_grade varchar(10) null
  , ols_subject varchar(10) null
  , ols_testdate varchar(10) null
 )

 -- 3. 선택한 값을 담을 커서선언
 declare cur_word1 cursor

 -- 4. 선택한 값을 커서 변수에 담는다.
 for SELECT ols_word, ols_program, ols_grade, ols_subject, ols_testdate FROM KPIS.DBO.HOM_OLS_WORDGROUP where ols_program = @PROGRAM_CODE and ols_grade = @GRADE_CODE
  
 -- 5. 커서를 오픈한다. 
 open cur_word1
 declare @c_word1 varchar(6000)
 declare @c_program varchar(50)
 declare @c_grade varchar(50)
 declare @c_subject varchar(50)
 declare @c_idx varchar(30)
 declare @c_testdate varchar(8)
 declare @c_value varchar(6000)
  
 -- 7. 변수의 각 row를 돌면서 fetch를 실행한다.
 fetch next from cur_word1 into @c_word1, @c_program, @c_grade, @c_subject, @c_testdate
 -- select * from cur_word1
 -- 8. while문을 돌면서 정보를 집어 넣는다.
 while @@fetch_status = 0
  begin
   declare cur_value cursor
   for
    select value from dbo.split(@c_word1, ',')

   open cur_value
    declare @oValue varchar(500)
    fetch next from cur_value into @oValue
    while @@fetch_status = 0
     begin
      insert into #LinkedWord(ols_word, ols_program, ols_grade, ols_subject, ols_testdate) values(@oValue, @c_program, @c_grade, @c_subject, @c_testdate)
      fetch next from cur_value into @oValue
     end
    
    close cur_value
    deallocate cur_value 
   fetch next from cur_word1 into @c_word1, @c_program, @c_grade, @c_subject, @c_testdate
  end

 -- 커서 닫고 메모리 해제
 close cur_word1
 deallocate cur_word1

 -- 주차변수 선언
 declare @SDATE varchar(8)
 declare @EDATE varchar(8)
 declare @WordCnt varchar(3)
 declare @UserSltCnt varchar(3)

 -- 주차 가져오기
 select @SDATE = ST_DATE, @EDATE = ED_DATE from COM_COD_WEEK where code_yea = @CODE_YEA and trm_code=@TRM_CODE and wek_code = @WEK_CODE

 -- 주차에 출제된 단어수
 select @WordCnt = count(a.ols_word)   
 from  #LinkedWord as a
   inner join hom_ols_wordgroup as b
   on(
    a.ols_testdate = b.ols_testdate
    and a.ols_program = b.ols_program
    and a.ols_grade = b.ols_grade
    and a.ols_subject = b.ols_subject
    and a.ols_testdate >= @SDATE
    and a.ols_testdate <= @EDATE
    and a.ols_program = @PROGRAM_CODE
    and a.ols_grade = @GRADE_CODE
   )

 SELECT @UserSltCnt = count(academy_seq)
 from hom_ols_userword  as a
   inner join #LinkedWord as b
   on (a.word_seq = b.ols_word and b.ols_program = @PROGRAM_CODE and b.ols_grade = @GRADE_CODE and a.wek_code = @WEK_CODE and a.user_seq = @USER_SEQ)

 SELECT @WordCnt as 'WeakWordCnt' -- 출제된 단어수
   , @UserSltCnt as 'UserSelectCnt' -- 사용자 선택 단어수
   , convert(int, @WordCnt) - convert(int, @UserSltCnt) as 'MarkedCnt' -- 출제된 단어수 - 사용자 선택 단어수 = 마크 단어.
   
 DROP table dbo.#LinkedWord -- 1. 기존 임시 테이블 삭제   

저작자 표시 비영리 변경 금지
Posted by -세티-