begin if F_CMMN_CDNM('A80400','COMM_IT02') = '1' then SELECT LECT_YEAR,LECT_SHTM,STNT_NUMB,PRAC_SHTM FROM cour019 WHERE HAKS_NUMB IN( SELECT COUR011.HAKS_NUMB FROM cour011 WHERE 1=1 AND COUR011.TYPL_KRNM like '%현장실습%' ) AND COUR019.PRAC_SHTM ='T' AND COUR019.LECT_YEAR = F_CMMN_CDNM('A80400','COMM_IT01') AND COUR019.LECT_SHTM = F_CMMN_CDNM('A80400','COMM_IT02'); elsif F_CMMN_CDNM('A80400','COMM_IT02') = '2' then SELECT LECT_YEAR,LECT_SHTM,STNT_NUMB,PRAC_SHTM FROM cour019 WHERE HAKS_NUMB IN( SELECT COUR011.HAKS_NUMB FROM cour011 WHERE 1=1 AND COUR011.TYPL_KRNM like '%현장실습%' ) AND COUR019.PRAC_SHTM ='T' AND COUR019.LECT_YEAR = F_CMMN_CDNM('A80400','COMM_IT01') AND COUR019.LECT_SHTM = F_CMMN_CDNM('A80400','COMM_IT02'); else SELECT LECT_YEAR,LECT_SHTM,STNT_NUMB,PRAC_SHTM FROM cour019 WHERE HAKS_NUMB IN( SELECT COUR011.HAKS_NUMB FROM cour011 WHERE 1=1 AND COUR011.TYPL_KRNM like '%현장실습%' ) AND COUR019.PRAC_SHTM is null AND COUR019.LECT_YEAR = F_CMMN_CDNM('A80400','COMM_IT01') AND COUR019.LECT_SHTM = F_CMMN_CDNM('A80400','COMM_IT02'); end if; end;
지금 이런식으로 시도는 하고있는데 조건값은 학기이고 바꾸고 싶은 부분은 COUR019.PRAC_SHTM is null 와 COUR019.PRAC_SHTM = 'T' 입니다.
F_CMMN_CDNM('A80400','COMM_IT02')는 학기를 가져오는 부분이고요
이런식으로 만들경우 into 로 넣어줘야하는데.. count로 해서 가져오기에는 저는 가져오고 싶은 값들이 많아서... 아직 많이 미숙하여 잘모르겠네요..
-- 함수가 매번 호출되는 것을 방지하기 위해 서브쿼리를 이용했습니다. SELECT lect_year , lect_shtm , stnt_numb , prac_shtm FROM cour019 WHERE haks_numb IN (SELECT haks_numb FROM cour011 WHERE typl_krnm LIKE '%현장실습%' ) AND lect_year = (SELECT f_cmmn_cdnm('A80400', 'COMM_IT01') FROM dual) AND lect_shtm = (SELECT f_cmmn_cdnm('A80400', 'COMM_IT02') FROM dual) -- 1. Case 를 이용하는 방법 -- AND CASE WHEN lect_shtm IN ('1', '2') THEN CASE WHEN prac_shtm = 'T' THEN 1 ELSE 0 END ELSE CASE WHEN prac_shtm IS NULL THEN 1 ELSE 0 END END = 1 -- 2. OR 조건을 이용하는 방법 -- AND ( (lect_shtm IN ('1', '2') AND prac_shtm = 'T' ) OR (lect_shtm NOT IN ('1', '2') AND prac_shtm IS NULL) ) -- 3. NVL 과 Case 사용하는 방법 -- AND NVL(prac_shtm, 'x') = CASE WHEN lect_shtm IN ('1', '2') THEN 'T' ELSE 'x' END ;